问题描述:编写函数将单链表逆置,逆置过程中不允许创建新的单链表。
问题分析:由于不能创建新的单链表,于是只能在该单链表上边遍历边逆置。定义三个指针p,q,r,以p为遍历单链表的指针变量,让p指向一个结点,q指向其后的一个结点,r指向q之后的一个结点(r可以为空),如下图所示。接着让q结点原来指向r结点的指针现在指向p结点,再将p,q指向的结点向后移,如此循环达到逆置。
实现代码:
新手一枚,如有错误,请多指正。
问题分析:由于不能创建新的单链表,于是只能在该单链表上边遍历边逆置。定义三个指针p,q,r,以p为遍历单链表的指针变量,让p指向一个结点,q指向其后的一个结点,r指向q之后的一个结点(r可以为空),如下图所示。接着让q结点原来指向r结点的指针现在指向p结点,再将p,q指向的结点向后移,如此循环达到逆置。
实现代码:
<span style="font-size:14px;">#include <iostream>
nodetype *invert(nodetype *h) //实现单链表的逆置
{
nodetype *p,*q,*r;
if(len(h)<=1)
{
cout<<"逆置的单链表至少有2个结点"<<endl;
return NULL;
}
else
{
p=h;q=p->next;
while(q!=NULL)
{
r=q->next;
q->next=p;
p=q;
q=r;
}
h->next=NULL;
h=p;
return h;
}
}</span>
新手一枚,如有错误,请多指正。