c++的菜鸟 没看懂这个小代码 请详解
来源:百度知道 编辑:UC知道 时间:2024/09/22 23:27:07
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的位置
}