1

可能重复:
如何仅使用两个指针来反转单链表?

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

我错过了什么?

4

2 回答 2

3

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

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

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

  3. 添加调试printf()语句,向您展示代码在执行时的作用。

于 2012-11-06T15:33:01.667 回答
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;
}
于 2012-11-06T15:36:33.947 回答