问答详情
源自:3-5 链表编码实战(三)

在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;	
	}
}


提问者:TXJ0123 2016-08-04 11:14

个回答

  • 慕后端7037387
    2017-04-27 10:19:46

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

  • 慕运维4915236
    2016-08-11 09:56:34

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

  • 芥末可乐
    2016-08-04 15:09:08

    不可以,调用完会销毁