这里我试图反复颠倒列表。但问题是列表有多大表示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;
}
答案 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->接下来。首先:你永远不会改变头部,然后你将头部的最后一个元素移到前面。