C语言 反转列表迭代逻辑错误



这里我试图迭代地反转列表。但问题是列表有多大,比如说3->2->4->NULL,最终它变成3->NULL,即只有一个元素的列表。请告诉我代码有什么问题

    struct node *reverselist(struct node *head)
{
     struct node *list=head;
     if(head==NULL)
     {
           printf("nThe list is emptyn");
           return head;
     }
     if(head->next==NULL)
     {
           printf("nThe list has only one elementn");
           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;
}

你的逻辑是错误的-指针new正在正确更新,但cur是固定的。

代替try this

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

您遍历cur->next并更改cur->next。首先,你永远不改变头部,其次,你把最后一个元素移动到头部之后的前面。

相关内容

  • 没有找到相关文章

最新更新