追加函数和nullptr无效

时间:2013-11-07 04:53:59

标签: c++

所以我追查了这个并且评论部分给出了我的问题,我在链接列表的末尾,我想将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;

}

1 个答案:

答案 0 :(得分:3)

克里斯已经告诉你问题是什么了。将指针指向null,然后取消引用它,您将获得所要求的内容:未定义的行为

这样做可以做到你想要的,代码少得多。

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;
}