反转列表迭代逻辑错误

时间:2013-06-10 10:56:41

标签: c linked-list

这里我试图反复颠倒列表。但问题是列表有多大表示3-> 2-> 4-> NULL,最后它变为3-> NULL,即仅包含一个元素的列表。 请告诉代码中的问题。

    struct node *reverselist(struct node *head)
{
     struct node *list=head;
     if(head==NULL)
     {
           printf("\nThe list is empty\n");
           return head;
     }
     if(head->next==NULL)
     {
           printf("\nThe list has only one element\n");
           return head;
     }
     struct node *cur=head;
     struct node *new=head->next;
     while(cur->next!=NULL)
     {
           cur->next=new->next;
           new->next=cur;
           new=cur->next;
         }
     return list;
}

2 个答案:

答案 0 :(得分:1)

您的逻辑错误 - 指针new正在正确更新,但cur已修复。

而不是试试这个

struct node *reverselist(struct node *head)
{
    struct node *temp;
    struct node *newHead = NULL;
    struct node *curNode = head;

    while(curNode != NULL) {
        temp = curNode->next;
        curNode->next = newHead;
        newHead = curNode;
        curNode = temp;
    }

    return newHead;
}

答案 1 :(得分:0)

你迭代cur->接下来改变cur->接下来。首先:你永远不会改变头部,然后你将头部的最后一个元素移到前面。