gpt4 book ai didi

c - 在我的链接列表中使用我的 pop() 函数后,我无法添加项目

转载 作者:太空狗 更新时间:2023-10-29 14:49:20 24 4
gpt4 key购买 nike

为什么弹出最后一项后程序没有添加?这两个函数的指针缺少一些东西

首先,我定义了一个 Node 结构并将其命名为 node。然后创建2个指针指向第一个和最后一个。

typedef struct Node {
int data;
struct Node* next;
} node;


node* first = NULL, * last = NULL;

在这里,Pop 函数。我创建了一个步行指针。如果要删除第一个节点,则 first 将指向 NULL。否则,它将迭代到最后一个节点并将其释放。

void Pop() {

if (first == NULL) {
printf("\n\nLIST IS EMPTY\n\n");
}
else if (first->next == NULL) {
node* temp = (node*)malloc(sizeof(node));

temp = first;
free(temp);
first = NULL;
}
else {
node* walk = first;

while (walk->next->next != NULL) {
walk = walk->next;
}

free(walk->next);

walk->next = NULL;

}

}

推送功能将创建一个节点并将其添加到列表中。如果链表为空,则由firstlast指出,否则连接到最后一个节点,成为last节点。

void Push(int data) {
node* temp = (node*)malloc(sizeof(node));

temp->data = data;

if (first == NULL) {
first = temp;
temp->next = NULL;
last = first;
}
else {
last->next = temp;
last = last->next;
last->next = NULL;
}
}

最佳答案

在 Pop() 中你永远不会更新最后一个,所以它仍然指向被删除的节点。当您再次推送时,您会将已删除的节点链接到新节点。

void Pop() {
node* walk = first;
node* deleted = NULL;

while (walk->next->next != NULL) {
walk = walk->next;
}

deleted = walk->next;
free(deleted);
walk->next = NULL;
last = walk; // <-- add this
}

此外,如果列表中只有一个节点,Pop() 将失败(并可能崩溃),因为 walk->next->next 将取消引用 NULL 指针。

关于c - 在我的链接列表中使用我的 pop() 函数后,我无法添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58419613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com