删除链表C编程中的某个节点
我的代码中不断出现分段错误,但我不知道为什么删除链表C编程中的某个节点,c,list,linked-list,segmentation-fault,C,List,Linked List,Segmentation Fault,我的代码中不断出现分段错误,但我不知道为什么int n是我将删除的节点。因此listDeleteNth(new,2)将删除序列中的3 1->2->3->4 1->2->4 typedef struct _node *Node; typedef struct _list *List; typedef struct _list { Node head; } list; typedef struct _node { int value; Node next
int n
是我将删除的节点。因此listDeleteNth(new,2)
将删除序列中的3
1->2->3->4
1->2->4
typedef struct _node *Node;
typedef struct _list *List;
typedef struct _list {
Node head;
} list;
typedef struct _node {
int value;
Node next;
} node;
void listDeleteNth (List l, int n) {
Node current = l->head;
int i = 0;
while (i < n-1) {
current = current->next; //node before deleted node.
}
Node temp = current->next; //make temp the one to be deleted.
if (current->next->next == NULL) {
printf("you deleted the last node!\n"); //check if dlting lastnode
} else {
current->next = current->next->next; //connect prev to after
}
}
typedef结构节点*node;
类型定义结构列表*列表;
类型定义结构列表{
节点头;
}名单;
类型定义结构节点{
int值;
节点下一步;
}节点;
void listDeleteNth(列表l,int n){
节点电流=l->head;
int i=0;
而(i下一步;//删除节点之前的节点。
}
Node temp=current->next;//使temp成为要删除的节点。
如果(当前->下一步->下一步==NULL){
printf(“您删除了最后一个节点!\n”);//检查是否删除了最后一个节点
}否则{
当前->下一个=当前->下一个->下一个;//将上一个连接到后一个
}
}
首先,i
和n
在循环中都不更新,因此它将继续移动到下一个节点,从而导致分段错误
您可以尝试更改原始循环:
while (i < n-1) {
current = current->next; //node before deleted node.
}
while(i下一步;//删除节点之前的节点。
}
对下列事项:
while (i < n-1) {
current = current->next; //node before deleted node.
i++;
}
while(i下一步;//删除节点之前的节点。
i++;
}
阅读假设列表中只有一个节点。那么这肯定会失败(提示:如果current->next->next
为NULL
,那么current->next
怎么可能工作?)您的代码中有几个问题,i
参数需要递增,您需要考虑接下来的4种情况:空列表,1个节点列表,要删除的节点是最后一个,要删除的节点不是第一个也不是最后一个是的,一些边缘情况也需要考虑,而我只是简单地指出主要问题