我遇到了這部分代碼的問題。我的目標是扭轉一個雙向鏈表。當我嘗試打印反向列表時收到垃圾值。雙向鏈表逆轉 - 打印出垃圾數據
typedef struct node{
int val;
struct node* prev;
struct node* next;
}Node;
typedef struct list{
Node* head;
Node* tail;
}List;
void pushFront(List* l, Node* node){
if(l->head == NULL){
l->head = node;
l->tail = node;
l->tail->next = NULL;
}else{
l->head->prev = node;
node->next = l->head;
l->head = node;
}
}
void printList(List* list){
Node *ptr = list->head;
while(ptr != NULL){
printf("%i ",ptr->val);
ptr = ptr->next;
}
puts("");
free(ptr);
}
void reverse(List* lista){
Node* ptr = lista->head;
Node* temp = NULL;
while(ptr != NULL){
temp = ptr->prev;
ptr->prev = ptr->next;
ptr->next = temp;
ptr = ptr->prev;
}
if(temp != NULL)
lista->head = temp->prev;
free(ptr);
free(temp);
}
輸出I得到:
原始列表:1 2 3 4 5 6 7
反轉列表:1 8532616 3 4 5 6 7 8528368 2002618240
'如果(!溫度= NULL)lista->頭= TEMP->分組;'是嗎?這是做什麼的?該列表有一個頭部指針*和一個尾巴*,他們會發生什麼? –
在你的'printList'中,你完成時調用'free(ptr)',這相當於'free(NULL)',它不會做任何事情,但它不需要用於任何目的。 –