私はコード内でセグメンテーションフォルトを継続していますが、理由はわかりません。 int n
は私が削除するノードです。したがって、listDeleteNth(new, 2)
はシーケンス内の3を削除します。リンクリスト内の特定のノードを削除するCプログラミング
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
}
}
https://ericlippert.com/2014/03/05/how-to-debugを読みます-small-programs/ –
リストにノードが1つしかないとします。次に、これは失敗することが保証されています(ヒント: 'current-> next'が' NULL'の場合、 'current-> next-> next'が働く可能性がありますか?) –
' i'パラメータにはいくつかの問題があります次の4つのシナリオについて考える必要があります:空リスト、1ノードリスト、削除するノードが最後のもの、削除するノードが最初ではなく最後のものではない –