注册 登录
编程论坛 数据结构与算法

链表倒置的算法看不懂,求解释

泡vs泡happy 发布于 2013-11-01 17:17, 660 次点击
void reverse(Lisklist L){
 Lnode *p;
p=H->next;
H->next=NULL;
while(p){
 q=p;
 p=p->next;
 q->next=H->next;
 H->next=q;


}



}
8 回复
#2
MissingLCY2013-11-01 18:23
应该是错的吧
#3
qunxingw2013-11-01 19:09
先理解一下实际插入头结点与第一个数据结点的方法。结合本题的方法:把原链表由p来指挥,原头结点置空以创建倒序的链表。先把要处理的结点保存到q,再由p指挥到原链表下个结点,此时按头结点插入法处理,如此等等 ,注意此函数的参数!
#4
LiuFuMinH2013-11-02 13:26
void CreateList(LinkList &L)       //将顺表逆置
{
LinkList p,q,s;
p=L->next;s=p;
q=p->next;
while(!(p->next==NULL))
{
p->next=p->next->next;
q->next=s;
s=q;
q=p->next;
}
L->next=s;
}
你试试这个
#5
LiuFuMinH2013-11-02 13:31
感觉你那个是错的
#6
泡vs泡happy2013-11-02 23:08
回复 2楼 MissingLCY
书上的,不会错
#7
爱编聪聪2013-11-04 10:47
void reverse(Lisklist L){
 Lnode *p;
 p=H->next;  //这是带头结点的单链表,这句就是把链表的首结点给p
 H->next=NULL;//然后就是把链表从头结点后断开,于是原来的链表就分成了两部分,一部分只剩一个头结点
 while(p){   //再把另一部分上的结点一个一个摘下来,利用“头插法”,依次插到头结点后面,就是实现了逆序
 q=p;
 p=p->next;                  主要是利用了头插法能实现逆序的功能
 q->next=H->next;
 H->next=q;




#8
泡vs泡happy2013-11-04 11:30
回复 7楼 爱编聪聪
好像通啦,头结点是一直从后往前走的吧,这点没想清楚,谢谢!
#9
泡vs泡happy2013-11-04 11:33
回复 3楼 qunxingw
谢谢
1