在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; } 

我错过了什么?

你没有提供足够的信息来获得更多的细节,所以我猜这是一个单独喜欢的列表。 如果是这样,您需要浏览一次列表。

 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; } 

你会在职业生涯中经常问自己这个问题,所以你想出一个解决方案是非常重要的。 以下是一些指示:

  1. 为您的代码编写unit testing 。 从一个空列表开始,列表包含一个元素,然后是两个,然后是三个。

  2. 在调试器中运行代码。

  3. 添加debug printf()语句,显示代码执行时的function。