| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1177 人关注过本帖
标题:谁能解释一下这段程序,关于链表的逆转
只看楼主 加入收藏
xilixjd
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2015-12-6
结帖率:100%
收藏
 问题点数:0 回复次数:2 
谁能解释一下这段程序,关于链表的逆转
程序代码:
void ReverseList(LinkList H)
/*逆置链表*/
{
    ListNode *p,*q;
    p=H->next;        /*p指向链表的第一个结点*/
    H->next=NULL;
    while(p)        /*利用头插法将结点依次插入到链表的头部*/
    {
        q=p->next;
        p->next=H->next;
        H->next=p;
        p=q;
    }
}

如果之前让头结点断裂H->next=NULL,那么接下来p->next=H->next不就=NULL?
自己画了图觉得这个程序完全不着边际。。但是运行起来又是对的。
2015-12-24 19:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
註釋的文字是錯的,誤導你了。

p=H->next;
這是把p指向頭結點的下一個結點,不是指向“鍊表的第一個結點”,明白這個,看下面的代碼就知道它是怎麽做的了。

授人以渔,不授人以鱼。
2015-12-24 21:34
ntprc0x
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:23
专家分:130
注 册:2015-11-14
收藏
得分:0 
我觉得你这个链表像是书上说的一种
“在每个链表的开始保留一个称为头节点的哑元节点。链表的头节点的数据项域可以忽略,但它的链域必须是指向链表中第一个节点的指针。”
所以第一次执行p->next=H->next 这时候p指向的是原链表第一个(有用数据项的)节点,逆转后它就是链表的最后一个节点,所以p->next=H->next就=NULL
2015-12-25 15:01
快速回复:谁能解释一下这段程序,关于链表的逆转
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014964 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved