链表添加结尾不起作用

时间:2016-04-20 07:46:45

标签: c++ linked-list

我一直在尝试在单链表中添加一个节点,但只添加了第一个元素。怎么了?

void addAtEnd(int key){
Node * head = Node;
if(head == NULL){
    head = new Node;
    head->key = key;
    head->next = NULL;
}
else{
    Node * current = head;
    while(current != NULL){
        current = current->next;
    }
    if(current == NULL){
        Node *temp = new Node;
        temp->key = key;
        temp->next = NULL;
        current = temp;
    }
}
}

1 个答案:

答案 0 :(得分:0)

您并未真正将值分配回Node字段。顺便说一下,名称确实令人困惑,可以考虑将其命名为node以避免使用类名。

其次,找到最后一个元素的循环是错误的,因为它应该是current->next != NULL)。

在C / C ++中,使用双指针可以更加简化,你可以完全摆脱if-else。在这种情况下,前两个段落都无效,因为赋值和检查都将成为指针取消引用的一部分:

Node **currentPointer = &node; /* or head or however you name the field head */

while (*currentPointer != NULL) {
    currentPointer = &(*currentPointer)->next;
}
Node *temp = new Node;
temp->key = key;
temp->next = NULL;
*currentPointer = temp;