c++的菜鸟 没看懂这个小代码 请详解

来源:百度知道 编辑:UC知道 时间:2024/09/22 23:27:07
struct linka {

int data;

linka* next;

};

void reverse(linka*& head)

{

if(head ==NULL)

return;

linka*pre, *cur, *ne;

pre=head;

cur=head->next;

while(cur)

{

ne = cur->next;

cur->next = pre;

pre = cur;

cur = ne;

}

head->next = NULL;

head = pre;

}
每行代码

reverse就是逆序。

关键在于
pre=head; //保存head到pre
cur=head->next; //保存head的下一个到cur
while(cur) //在cur不为NULL的情况下
{//实现逆转,就是以前由前向后指,改为由后向前指
ne = cur->next; //把cur的下一个保存到ne
cur->next = pre; //把cur的下一个指向原来的前一个
pre = cur; //原来的pre改为cur
cur = ne; //原来的cur改为原来的cur的下一个
}
head->next = NULL; //善后工作,之前的头变尾了,尾的下一个当然为空
head = pre; //善后工作,将以前的尾改为头。

pre=head; //将pre指向头结点

cur=head->next;//将cur指向头结点指向的下一个结点

while(cur)//如果cur不为空,一直循环,这个循环是实现链表的反序

{

ne = cur->next;//ne指向cur的下一个结点

cur->next = pre; //将cur下一个结点指向pre

pre = cur;//将pre指向cur的位置

cur = ne;//将cur指向ne的位置

}