可能重复:
How to reverse a singly linked list using only two pointers?
这是反转链表的C代码。但这并没有产生理想的输出。
struct node *temp,*prev;
while(head->next!=NULL)
{
temp=prev=head;
while(temp->next->next!=NULL)
{
temp=temp->next;
prev=prev->next;
}
temp=temp->next;
temp->next=prev;
prev->next=NULL;
}
我错过了什么?
答案 0 :(得分:3)
在你的职业生涯中,你经常会问自己这个问题,所以你想出一个解决方案是非常重要的。以下是一些提示:
Write unit tests代码。从一个空列表开始,列表包含一个元素,然后是两个,然后是三个。
在调试器中运行代码。
添加调试printf()
语句,显示代码执行时的功能。
答案 1 :(得分:1)
您没有提供足够的信息来获取更多详细信息,因此我猜测它是一个单独喜欢的列表。如果是这样,您需要在列表中运行一次。
void reverse(struct node **p) {
struct node *buff = NULL;
struct node *head = *p;
while (head != NULL) {
struct node *temp = head->next;
head->next = buff;
buff = head;
head = temp;
}
*p = buff;
}