2012-11-06 40 views
1

可能重複:
Reverse a singly linked list倒車單鏈表用C

這是一個C代碼扭轉一個鏈表。但是這不會產生所需的輸出。

struct node *temp,*prev; 
while(head->next!=NULL) 
    { 
    temp=prev=head; 
    while(temp->next->next!=NULL) 
     { 
    temp=temp->next; 
    prev=prev->next; 
     } 
    temp=temp->next; 
    temp->next=prev; 
    prev->next=NULL; 
    } 

我在想什麼?

+0

考慮先調試代碼... !!! –

回答

1

你沒有提供足夠的信息,以有更多的細節,所以我猜它是一個單獨喜歡列表。如果是這樣,你需要運行一次你的列表。

void reverse(struct node **p) { 
    struct node *buff = NULL; 
    struct node *head = *p; 

    while (head != NULL) { 
     struct node *temp = head->next; 
     head->next = buff; 
     buff = head; 
     head = temp; 
    } 

    *p = buff; 
} 
3

你會問你自己這個問題經常在你的職業生涯中,所以重要的是你爲此提出了一個解決方案。這裏有一些指針:

  1. Write unit tests爲您的代碼。從一個空列表開始,一個列表包含一個元素,然後是兩個,然後是三個。

  2. 在調試器中運行代碼。

  3. 添加調試printf()聲明,這些聲明顯示了代碼在執行時的功能。