链表,对将节点添加到链表头部的函数感到困惑
Posted
技术标签:
【中文标题】链表,对将节点添加到链表头部的函数感到困惑【英文标题】:Linked list,Confused about Function that adds node to head of the list 【发布时间】:2015-09-06 05:39:38 【问题描述】:我有一个关于将创建/添加新节点添加到列表顶部的函数的问题。这是设置。
在主程序中创建了一个头。我们将列表设置为 Null
IntNode* head = new IntNode(3,NULL);
我的问题是关于将节点添加到列表顶部的函数。假设列表中至少有一个节点。(我们刚刚创建的那个)
void headInsert(IntNodePtr& head, int theData)
head = new IntNode(theData, head);
我知道它创建了一个新节点,并使传递的主程序中已经声明的指针指向新节点。但是我对构造函数中参数的“头部”部分(而不是 headInsert 函数)感到困惑。当我们在上面的 IntNode 构造函数中传递 head 时,我对传递的到底是什么感到困惑。那头设置变量链接,指向哪个头指向正确? ******我的问题是,它是否首先将*link(类变量)设置为指向head指向的内容,在这种情况下,列表指向NULL的编号为3的节点,然后使head指向到新的节点?所以换句话说,作业的正确部分首先完成?当我们创建新节点时,我对传入的内容感到非常困惑。
class IntNode
public:
IntNode( )
IntNode( int theData, IntNode* theLink)
: data(theData), link(theLink)
IntNode* getLink( ) const return link;
int getData( ) const return data;
void setData( int theData) data = theData;
void setLink(IntNode* pointer) link = pointer;
private:
int data;
IntNode *link;
;
void headInsert(IntNodePtr& head, int theData)
head = new IntNode(theData, head);
【问题讨论】:
首先评估作业的右侧。 C++ 中的求值顺序有严格的规定。 【参考方案1】:对作业方面的评估 -
head
和
new IntNode(theData, head)
根本没有排序,但在执行分配之前,双方都已完全评估。
由于双方都没有修改head
的值,所以无论求值顺序如何,结果都是一样的。
【讨论】:
以上是关于链表,对将节点添加到链表头部的函数感到困惑的主要内容,如果未能解决你的问题,请参考以下文章
线性表练习之Example038-编写一个函数将链表 h2 链接到链表 h1 之后,要求链接后的链表仍然保持循环链表形式