在链表列表中,开头添加变量的代码是什么?

问题描述:

我想在我的链表的开头添加并打印一个新节点。但是我的代码在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

+1后一个选项(回头看新的头指针并依靠*调用者*覆盖旧头)是相当不理想的*,因为它使得调用者有责任执行链表功能api应该做的是:管理节点指针。遗憾的是,在学术界的链表列表中看到这种实践并不罕见。 – WhozCraig