在链表列表中,开头添加变量的代码是什么?
问题描述:
我想在我的链表的开头添加并打印一个新节点。但是我的代码在C++打印时不显示添加的数据。在链表列表中,开头添加变量的代码是什么?
struct node{
int data;
node *next;
};
void add_begin(node *S, int k)
{
node *T;
T=new (node);
T->data=k;
T->next=S;
S=T;
}
void print(node *S)
{
cout<<"Elements of the node :\n";
while (S->next!=NULL)
{
cout<<S->data<<endl;
S=S->next;
}
cout<<S->data<<endl;
}
答
我假设你会调用这个函数传递一个node
这是一个列表的头部和int
这是新的数据,并期待着您在传递的节点被更新到新节点。
不幸的是,这不是发生了什么事情。在函数add_begin
内部,它有自己的指针指向列表中的第一个节点,所以当你用S=T
更新它时,只会更新函数中的指针,而不是你传入的指针。
如果要更新传入的指针,应通过引用(void add_begin(node *&S, int k)
)传递它,或从函数返回新节点指针并手动为其分配外部指针。
+1后一个选项(回头看新的头指针并依靠*调用者*覆盖旧头)是相当不理想的*,因为它使得调用者有责任执行链表功能api应该做的是:管理节点指针。遗憾的是,在学术界的链表列表中看到这种实践并不罕见。 – WhozCraig