我想在C中構建自己的LinkedList幾個小時了,而我只是無法使它正常工作。請指出該代碼出錯的地方和原因。爲實際行爲向下滾動到「主」。C LinkedList將無法正常工作
struct List {
struct Node * head;
} list;
struct Node {
int data;
struct Node * next;
} node;
void
add(struct List* list, int z){
//add as first element
if(list -> head == NULL){
list -> head = malloc(sizeof(struct Node));
(list -> head) -> data = z;
(list -> head) -> next = NULL;
return;
}
//add to tail
struct Node * curr = list -> head;
while((curr -> next) != NULL){
curr = curr -> next;
}
list -> head = malloc(sizeof(struct Node));
(list -> head) -> data = z;
(list -> head) -> next = NULL;
return;
}
void
printNode(struct Node * node){
if(node == NULL){
printf("NULL\n");
return;
}
printf("%d -> ", node->data);
printNode(node->next);
}
void
printList(struct List * list){
if(list->head == NULL)
printf("empty\n");
else
printNode(list->head);
}
出於某種原因,'add'確實會改變傳遞的List,使得只有最後一個元素保留在那裏。我已經多次重寫了程序 - 遞歸和迭代 - 結果似乎總是這樣。
int
main(){
struct List myList;
myList.head = NULL;
printList(&myList); // empty
add(&myList, 1);
printList(&myList); // 1 -> NULL
add(&myList, 2);
printList(&myList); // 2 -> NULL, should be 1 -> 2 -> NULL
add(&myList, 3);
printList(&myList); // 3 -> NULL, should be 1 -> 2 -> 3 -> NULL
add(&myList, 4);
printList(&myList); // 4 -> NULL, should be 1 -> 2 -> 3 -> 4 -> NULL
}
我甚至重新在其他語言中的程序,看是否有在任何程序邏輯突破性的缺陷,但在其他地方我得到了它馬上工作。
只要採取在一張紙上,寫列,用於'添加(每一個變量)',然後寫行對代碼在'添加)的每一行('。每個步驟中每個變量的值是多少?你會很快看到。 –
約翰內斯的回答是正確的,但是你的程序也是非常低效的。您應該將新元素添加到列表的開頭,或將指針存儲在List結構中的最後一個節點。這是列表的重點。 – user31264
調試器.......................... –