【发布时间】:2017-10-18 01:26:02
【问题描述】:
我的代码中不断出现分段错误,但我不知道为什么。 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
}
}
【问题讨论】:
-
假设您的列表中只有一个节点。那么这肯定会失败(提示:如果
current->next是NULL,current->next->next怎么可能工作?) -
你的代码有几个问题,
i参数需要自增,你需要考虑接下来的4个场景:空列表,1个节点列表,要删除的节点是最后一个一、要删除的节点不是第一个也不是最后一个
标签: c list linked-list segmentation-fault