1
任務是反轉鏈接列表,因此我建立鏈接列表,然後打印出來,然後是所有反轉函數,然後再打印出它。但是,第二張照片是空的。我認爲這是指針問題,任何人都可以解釋?謝謝。反轉鏈接列表
void reverseLinkedList(struct node** head) {
struct node* curr, *prev, *temp;
curr = *head;
prev = NULL;
while (curr) {
temp = prev;
prev = curr;
curr = curr->next;
prev = temp;
}
*head = prev;
}
struct node* buildLinkedList(int list[], int len) {
struct node* head = NULL;
struct node* tail = NULL;
struct node* node;
int i;
for (i = 0; i < len; i++) {
node = (struct node*) malloc(sizeof(struct node));
node->data = list[i];
node->next = NULL;
if (!head) {
head = node;
} else {
tail->next = node;
}
tail = node;
}
return head;
}
void printLinkedList(struct node** head) {
struct node* s = *head;
while(s) {
printf("%d\t", s->data);
s = s->next;
}
printf("\n");
}
int main() {
int list [6] = {6,7,8,3,4,5};
struct node* header = NULL;
header = buildLinkedList(list, 6);
printLinkedList(&header);
reverseLinkedList(&header);
printLinkedList(&header);
}
結果我從控制檯得到的是:
6 7 8 3 4 5
其中第二printLinkedList正在打印什麼。想知道問題在哪裏。謝謝。在你的函數扭轉名單
您是否單步執行代碼並觀察調試器中的數據更改?這在尋找錯誤時可以幫助很大。 – Tony
投票結束:您可以通過逐步調試調試器中的代碼或添加一堆printf語句來告訴您中間變量的狀態,從而解決此問題。 –