免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 23961 | 回复: 89
打印 上一主题 下一主题

如何实现一个单链表的反转?  关闭 [复制链接]

GAORJ 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-01 10:58 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-11-01 12:31 |只看该作者

如何实现一个单链表的反转?

不使用辅助结点是什么意思?

论坛徽章:
0
3 [报告]
发表于 2004-11-01 12:40 |只看该作者

如何实现一个单链表的反转?

修改节点指针不就OK了

论坛徽章:
0
4 [报告]
发表于 2004-11-01 12:51 |只看该作者

如何实现一个单链表的反转?

不使用任何辅助节点?
那可能吗?
起码要一两个指针吧
GAORJ 该用户已被删除
5 [报告]
发表于 2004-11-01 12:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2004-11-01 13:00 |只看该作者

如何实现一个单链表的反转?

可以这样做,比如一个链表是这样的: 1->;2->;3->;4->;5
第一次,取出1并且把它从链表中删除,然后把它作为新链表的第一个元素。
第二次,取出2并且把它从链表中删除,在新链表中2的下一个元素是1,即在第二次操作之后新旧链表
分别是:旧链表 3->;4->;5 新链表 2->;1
依此类推,这样在一次遍历旧链表就可以完成链表的逆转,不需要其他的指针(就是辅助结点),
复杂度与链表长度成正比,为O(N)。

论坛徽章:
0
7 [报告]
发表于 2004-11-01 13:14 |只看该作者

如何实现一个单链表的反转?


  1. typedef data int;

  2. typedef struct ListNode {
  3.         ListNode *next;
  4.         data elem;
  5. }ListNode, *pListNode;

  6. pListNode reverse_list(pListNode list)
  7. {
  8.         assert(list);
  9.        
  10.         pListNode p, q, s;       
  11.        
  12.         /*
  13.                 循环中,p指向旧链表的第一个结点,q指向新链表的第一个结点,
  14.                 p不断的向后走直到遍历完旧链表,而q不断的前移。
  15.         */
  16.         for (p = list, q = NULL; NULL != p ;p = s) {       
  17.                 s = p->;next; /* 保存旧链表的下一个结点 */
  18.                 p->;next = q; /* 把一个结点从旧链表断开并变成新链表的第一个结点 */
  19.                 q = p;             /* q指针前移 */
  20.                 p = s;             /* p指针后移 */
  21.         }
  22.        
  23.         return q;
  24. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-11-01 13:16 |只看该作者

如何实现一个单链表的反转?

原帖由 "GAORJ" 发表:
请教在不用辅助节点的情况下如何修改链表节点的指针使其反转指向???

辅助节点是指用来存储链表节点指针的临时节点变量!希望我说清楚了我的意思。

诚心恳求解答!谢谢


这句话,真的不懂。结点指针是指针,存放的是地址。结点变量是存放的结点内容。你这句话,到底是什么意思呢?

论坛徽章:
0
9 [报告]
发表于 2004-11-01 13:17 |只看该作者

如何实现一个单链表的反转?

楼上的楼上,你还是用了""辅助节点""啊.呵呵.
楼主的要求很奇怪.是不是变态老师出的变态题目啊?

论坛徽章:
0
10 [报告]
发表于 2004-11-01 13:19 |只看该作者

如何实现一个单链表的反转?

原帖由 "GAORJ" 发表:
辅助节点是指用来存储链表节点指针的临时节点变量!希望我说清楚了我的意思。

[quote]原帖由 "converse"]pListNode p, q, s;[/quote 发表:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP