反转链表错误

时间:2015-01-04 06:01:28

标签: c linked-list

我为反转单链表而编写的以下函数有什么问题?

struct ListNode* reverse_ll(struct ListNode *head)
{
    struct ListNode *temp,*node,*prev;
    temp=head->next;
    head->next=NULL;
    prev=head;
    while(temp)
    {
        node=temp->next;
        temp->next=prev;
        prev=temp;
        temp=node;  
    }
    return prev;
}

1 个答案:

答案 0 :(得分:2)

如果您不忘记分配新的head指针,您的代码可以反转列表:

head = reverse_ll(head);

由于@ user3553031已经怀疑,您的printlist功能无法正常运行。它不会打印最后一个元素。更改while的条件。你在这里也不需要`head'变量:

void printlist(struct ListNode *curr)
{
    while (curr) {
        printf("%d ", curr->data);
        curr = curr->next;
    }
    putchar('\n');
}

最后,关于一致性的说明:如果您的反转列表的功能称为reverse_ll,则您的打印功能可能应该被称为print_ll