找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2924|回复: 7

[通用编程] C链表里的倒序排列

[复制链接]
发表于 2007-8-21 11:15:43 | 显示全部楼层 |阅读模式
问结点数据域依次为 a1,a2.........,an的一个单链表所有结点逆置,即第一个结点数据域变为 an
最后一个结点数据域变为 a1?
[s:8]这个应该怎么做呢?
发表于 2007-8-21 23:36:53 | 显示全部楼层
最简单的方法,开临时的指针储存需要保持的数据,然后从头到尾遍历一遍。
  1. // 节点定义如下(伪码,不一定对哦-_-b)
  2. struct node
  3. {
  4.    int value; //这里储存数据,第一个节点数据就是a1,依次类推……
  5.    node* next; //这里是下一个节点的地址,如果是0表示链表结束了。
  6. };
  7. // 函数接受传入的头节点地址,返回新的头节点地址
  8. node* Reverse(node* pFirst)
  9. {
  10. node* pCur = pFirst;
  11. node* pNext = 0;
  12. node* pLast = 0;
  13. while(pCur)
  14. {
  15.   pNext = pCur->next;
  16.   pCur->next = pLast;
  17.   pLast = pCur;
  18.   pCur = pNext;
  19. }
  20. return pCur;
  21. }
复制代码
发表于 2007-8-21 23:50:37 | 显示全部楼层
如果是双头的话,next和prev指针的值交换就OK……
发表于 2007-8-23 00:52:22 | 显示全部楼层
引用第0楼august于2007-08-21 11:15发表的 C链表里的倒序排列 :
问结点数据域依次为 a1,a2.........,an的一个单链表所有结点逆置,即第一个结点数据域变为 an
最后一个结点数据域变为 a1?
[s:8]这个应该怎么做呢?

ls啊,如果是双向链表,这问题还有什么意义……\\(-____-)/
发表于 2007-8-23 01:49:51 | 显示全部楼层
[s:5]
其实我的意思是:为什么不做成双头的。

各位WS我吧……
发表于 2007-8-23 09:45:08 | 显示全部楼层
这不就是循环链表么?

ps.怪事了.FantasyDR怎么引用lz的发言,却对ls的说话.
发表于 2007-8-23 21:57:06 | 显示全部楼层
我把“单链表”三个字加颜色了:)
发表于 2007-8-23 22:43:36 | 显示全部楼层
循环链表惷最後項會指向第一項
雙向link list指移動時可住前一項/下一項
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|幻想森林

GMT+8, 2026-11-6 17:28 , Processed in 0.022419 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表