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

来源:3-5 链表编码实战(三)

TXJ0123

2016-08-04 11:14

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回答

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

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

    BingBi...

    请问这就是老师所说的要在堆中申请内存的原因吗?还想请问一下为什么不对链表长度++呢?⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

    2018-03-30 10:47:26

    共 1 条回复 >

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

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

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

    不可以,调用完会销毁

数据结构探险之线性表篇

线性表的主体顺序表和链表,让学员能够将知识融会贯通学以致用

57563 学习 · 257 问题

查看课程

相似问题