哪位能讲下下面链表反转的每一步的含义,多谢多谢 本帖最后由 muminsanhao 于 2011-05-23 17:24:41 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void reverse_link(PLinkList linklist){ if (!linklist) //判断链表是否为空; { return ; } PLinkList p,q; //定义两个链表结点; p=linklist->Next; //将p节点执行linklist的下一个结点; linklist->Next=NULL; //然后将linklist的下一个结点置为NULL; while(p) //判断每个结点是否为空; { q=p; //如果该结点不为空,则将该节点赋值给p结点; p=p->Next; //p结点指向下一个结点; q->Next=linklist->Next; //将linklist的下一个结点赋值q指向的下一个结点; linklist->Next=q;//linklist的下一个结点结点指向q结点; //上面这几步相当于向q结点中插入一个新结点; }} linklist应该是表头,不包含节点信息 首先谢谢你的回答,有些地方还是不大懂.linklist->Next=NULL; 为什么将节点置为空值啊?返回的是linklist,应该是像linklist插入节点啊,你说是像q插入节点,q与linklist是什么关系啊? 画个流程示意图就明白了,和刚学双链表一样。无非是三个节点,prev cur next。分别置换 如果说实质那它是表头,但是对于使用者来说不正是整个表吗,所以只要你写程序的时候知道这点就可以了~(修改链表类自己的时候知道它实质是个表头,外部代码使用的时候就看做整个表).linklist->Next=NULL; 其实是为了让链表即时没执行过while循环都是有效的(此时代表空链表),继而说,不管你这个reverse_link函数怎么个执行法,你都要保证链表的最后一个结点的下个节点指向NULL,它是判断链表结束的唯一凭证(除非你特殊处理,比如价格count统计节点个数等等). 如何获取到指定位置的控件句柄? 求VC.NET不使用第三方控件,可以使用MS的控件,实现数据库DataGrid的表现方式的方法 要出钻石了!!! collide〔intstartX…〕和onTimer〔…〕的作用 dll调用关闭出现内存访问异常 今年的活干完了,散分! 工具条上的每个按钮的长度不相同,如何来做? 本贴横秋不给分 VB 写的OCX 如何事件驱动 在线等,马上结 不可思议的问题(VC) FillRect不覆盖掉其父窗口的内容 关于MFC客户区录制视频的问题
{
if (!linklist) //判断链表是否为空;
{
return ;
}
PLinkList p,q; //定义两个链表结点;
p=linklist->Next; //将p节点执行linklist的下一个结点;
linklist->Next=NULL; //然后将linklist的下一个结点置为NULL;
while(p) //判断每个结点是否为空;
{
q=p; //如果该结点不为空,则将该节点赋值给p结点;
p=p->Next; //p结点指向下一个结点;
q->Next=linklist->Next; //将linklist的下一个结点赋值q指向的下一个结点;
linklist->Next=q;//linklist的下一个结点结点指向q结点; //上面这几步相当于向q结点中插入一个新结点;
}}
linklist->Next=NULL; 为什么将节点置为空值啊?
返回的是linklist,应该是像linklist插入节点啊,你说是像q插入节点,q与linklist是什么关系啊?
(修改链表类自己的时候知道它实质是个表头,外部代码使用的时候就看做整个表).linklist->Next=NULL; 其实是为了让链表即时没执行过while循环都是有效的(此时代表空链表),
继而说,不管你这个reverse_link函数怎么个执行法,你都要保证链表的最后一个结点的下个节点指向NULL,它是判断链表结束的唯一凭证(除非你特殊处理,比如价格count统计节点个数等等).