这里我试图迭代地反转列表。但问题是列表有多大,比如说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。首先,你永远不改变头部,其次,你把最后一个元素移动到头部之后的前面。