我为反转单链表而编写的以下函数有什么问题?
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;
}
答案 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
。