gpt4 book ai didi

c - C 中的链表程序错误

转载 作者:行者123 更新时间:2023-11-30 19:07:50 25 4
gpt4 key购买 nike

这是我的代码,它删除了最后一个列表项的数量。我试图实现链接列表的概念。

void del(list** head,int da,int n) {  //da-for no of elements to be   
list *l1; //deleted from end.
int n1 = n-da; //n-for total no of elements in list
if (n1 == 0)
*head = NULL;
else {
l1 = *head;
n1 = n1-1;
while(n1) {
l1 = l1->next;
n1--;
}
l1->next=NULL;
}
}

包含此代码后,我收到 SIGSEGV 错误。这是什么意思?请帮我处理这段代码。由于我最近开始学习数据结构。我没有那么多编程经验,但我了解一些 C 基础知识。

最佳答案

如果您的问题是“什么是 SIGSEGV?”这是 Segmentation Fault 的错误信号。现在,如果您想知道是什么原因造成的,那就是您的 void del(list** head,int da,int n)功能导致undefined behaviorda < n因为它会导致逻辑错误,从而导致无限循环:

int n1 = n - da; // Assume n < da

...

while(n1) { // n would be 0< therefor: n1 will never equal 0 causing infinite loop
l1 = l1->next;
n1--;
}

如果您尝试从链接列表的后面删除 n 个元素,有一些解决方案:

1。向后迭代

迭代到链表尾部或者当list->next == null时然后向后迭代,每次迭代删除正在传递的节点,直到删除了 n 个节点

2。父类存储链表的大小

另一种方法是使用一个类 linked link存储链表的头节点、尾节点和大小。然后从列表的尾部迭代删除 n O(N) 个节点,或者迭代到 length - n 然后开始删除,直到到达尾部。

关于c - C 中的链表程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46408761/

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