C语言中的链表程序错误
这是我的代码,它从上一个列表中删除了列表项的数量。我试图实现链表的概念C语言中的链表程序错误,c,linked-list,C,Linked List,这是我的代码,它从上一个列表中删除了列表项的数量。我试图实现链表的概念 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 (n
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?”这是一个错误信号。现在,如果您想知道是什么导致了它,那么是您的void del(list**head,int da,int n)
函数在da
时导致了它,因为它导致了一个逻辑错误,导致了一个无限循环:
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--;
}
int n1=n-da;//假设nnext;
n1-;
}
如果您试图从链表后面删除n个元素,有几种解决方案:
1.反向迭代
迭代到链表的尾部或当list->next==null
时,然后在每次迭代后向后迭代,删除正在传递的节点,直到n个节点被删除
2.存储链接列表大小的父类
另一种方法是使用一个类
链接
,该类存储头节点、尾节点和链接列表的大小。然后从列表尾部迭代,删除n个(n)节点,或者迭代到长度-n,然后开始删除,直到到达尾部。我认为,当调用delete时,如果对n1
的值太大,可能会出现segfault。本例中的循环:
while(n1) {
l1 = l1->next;
n1--;
}
将走得太远,访问
*l1
,其中l1==NULL
。我不知道你的del
函数应该做什么,但这就是你的segfault的来源。如果从main中删除对del
的调用,则不会出现此类问题。请仔细检查您到底遇到了什么错误,并完整逐字地引用它。另外,请进行一些基本的调试,以尽可能缩小出现错误的范围。您的错误在函数del
中。如果da
和n
是什么意思?是否应删除索引da
到n
中的元素?