所以我追查了这个并且评论部分给出了我的问题,我在链接列表的末尾,我想将nullptr更改为新节点* q但我一直返回原始链接列表没有新添加的节点。
Node* append( int x, Node* p ) {
Node *q=new Node;
Node *head=p;
if(p==nullptr) {
p=q;
q->value=x;
}
while (p!=nullptr) {
p=p->next;
}
//arrived at NULL ptr
q=p->next; //<---this is causing my program to crash.
q->value=x;
q->next=nullptr;
return head;
}
答案 0 :(得分:3)
这样做可以做到你想要的,代码少得多。
Node* append( int x, Node* p )
{
Node **pp = &p;
while (*pp)
pp = &(*pp)->next;
*pp = new Node;
(*pp)->value = x; // this really should be a Node::Node() parameter
(*pp)->next = nullptr; // ... and this should be set in Node::Node as well
return p;
}
如果你让Node::Node(int x)
相当聪明,那就更简单了。例如,使用Node
之类的:
struct Node
{
int val;
Node *next;
Node(int val) : val(val), next() {}
};
然后你可以这样做:
Node* append( int x, Node* p )
{
Node **pp = &p;
while (*pp)
pp = &(*pp)->next;
*pp = new Node(x);
return p;
}