在此代碼:爲什麼在複製鏈表時這個指針被賦值?
Node *CopyList(Node **head) {
Node *current = *head;
Node *NewNode = NULL;
Node *tail = NULL;
while (current != NULL) {
if (NewNode == NULL) {
NewNode = malloc(sizeof(Node));
NewNode->data = current->data;
NewNode->next = NULL; // routine
tail = NewNode;
} else {
tail->next = malloc(sizeof(Node)); // here
tail = tail->next;
tail->data = current->data;
tail->next = NULL;
}
current = current->next;
}
return(NewNode);
}
爲什麼我們分配tail->next
到malloc()
調用的結果?很顯然,如果我們不這樣做,會發生分段錯誤。
爲什麼我們不是隻分配tail
而不是tail->next
?有什麼情況下我應該這樣分配?
這段代碼看起來很合理。在第一次迭代中,它分配新列表的頭部('NewNode'),並在每個後續迭代中擴展新列表的尾部。你認爲這是什麼錯誤?由於'tail',不應該有段錯誤,因爲它在使用時不會爲NULL。這裏唯一錯誤的是'malloc'的返回值沒有被檢查爲NULL。 – JS1
我沒有想到這個錯誤,只是我沒有得到它的方式。 –