//假设链表是1234567 最后输出为什么是17654321 7654321 7654321
//最前面多一个1.没有其他输出函数
linklist reverse(linklist head)
{
/*头插法 head断开再头插接收*/
linklist p,q;
p=head->next; //head后第一个有效节点
head->next=NULL; //置空头节点
q=p->next;
/*逆序插入*/
while(p->next!=NULL)
{
p->next=head;
head=p;
p=q;
q=q->next; //pq同时移动遍历
}
p->next=head; //当p在最后位置时,
head=p;
return head;
}
在逆序插入的 while 循环中,当 p 到达最后一个节点时,由于 p->next 为 NULL,循环终止,而最后一个节点并没有加入链表,因此需要在循环结束后再添加最后一个节点。修改后的代码如下:
linklist reverse(linklist head) {
linklist p = head->next;
head->next = NULL;
while (p != NULL) {
linklist q = p->next;
p->next = head;
head = p;
p = q;
}
return head;
}