我一直在尝试在单链表中添加一个节点,但只添加了第一个元素。怎么了?
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;
}
}
}
答案 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;