为了账号安全,请及时绑定邮箱和手机立即绑定

在ListInsertHead(Node *pNode)和ListInsertTail(Node *pNode)函数中,可以直接对pNode进行链接操作,而不用新建newNode节点,如下代码所示,可以吗?

bool ListInsertHead(Node *pNode)
{
	pNode->next=m_pList->next;
	m_pList->next=pNode;
	if(m_pList-next==pNode)
	{
		return true;
	}
	else
	{
        return false;	
	}
}

bool ListInsertTail(Node *pNode)
{
	Node *currentNode=m_pList;
	while(currentNode->next!=NULL)
	{
		currentNode=currentNode->next;
	}
	currentNode->next=pNode;
	pNode->next=NULL;
	if(currentNode->next==pNode)
	{
		return true;
	}
	else
	{
        return false;	
	}
}


正在回答

3 回答

直接将传入的结点作为链表中新添加的结点内存,是不安全的。因为传入的结点内存是有可能在链表外被释放掉的,如果被释放掉,则链表就会断开失效;而申请一个新的结点内存作为链表的结点内存,则该内存只有在链表中才可以被释放掉,这样保证了链表内存是安全释放的;

2 回复 有任何疑惑可以回复我~
#1

BingBing_Elf

请问这就是老师所说的要在堆中申请内存的原因吗?还想请问一下为什么不对链表长度++呢?⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
2018-03-30 回复 有任何疑惑可以回复我~

不可以啊 看Head函数中,第一行语句已经改变了pNode的指针域,接着的第二行语句中pNode就不是你之前传进来的结点。。。。就像交换a与b 的值,需要定义一个temp值

0 回复 有任何疑惑可以回复我~

不可以,调用完会销毁

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

在ListInsertHead(Node *pNode)和ListInsertTail(Node *pNode)函数中,可以直接对pNode进行链接操作,而不用新建newNode节点,如下代码所示,可以吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信