在C中反转单​​链表

时间:2012-11-06 15:29:16

标签: c linked-list singly-linked-list

  

可能重复:
  How to reverse a singly linked list using only two pointers?

这是反转链表的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;
  }

我错过了什么?

2 个答案:

答案 0 :(得分:3)

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

  1. Write unit tests代码。从一个空列表开始,列表包含一个元素,然后是两个,然后是三个。

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

  3. 添加调试printf()语句,显示代码执行时的功能。

答案 1 :(得分: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;
}