免费注册 查看新帖 |

Chinaunix

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

谁能贴个最全的单链表就地就逆转算法? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-26 09:45 |只看该作者 |倒序浏览
普通的,递归的,还有没有其他的?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2008-05-26 21:43 |只看该作者
原帖由 sunchiang 于 2008-5-26 09:45 发表
普通的,递归的,还有没有其他的?

你会实现几种?

论坛徽章:
0
3 [报告]
发表于 2008-05-27 14:23 |只看该作者
原帖由 MMMIX 于 2008-5-26 21:43 发表

你会实现几种?



我就是在这个问题上绕不清楚,哪位高手指点一下?

论坛徽章:
0
4 [报告]
发表于 2008-05-29 09:29 |只看该作者
你的题目有些不清楚,是链表反序吗?反正要临时指针,做一个临时的头,把单向链表看做一个栈就很容易做出来了。

论坛徽章:
0
5 [报告]
发表于 2008-06-11 15:32 |只看该作者
原帖由 Cyberman.Wu 于 2008-5-29 09:29 发表
你的题目有些不清楚,是链表反序吗?反正要临时指针,做一个临时的头,把单向链表看做一个栈就很容易做出来了。


你的意思是先把链表节点入栈然后再出栈形成新链表么?似乎不满足“就地”条件啊。肯定是需要临时变量的,有没有具体算法给贴几个?

论坛徽章:
0
6 [报告]
发表于 2008-06-11 17:12 |只看该作者
原地反转

  1. Node * reverse(Node *list)
  2. {
  3.     Node *p = list, *q = NULL, *r;
  4.     while (p) {
  5.         r = p->next;
  6.         p->next = q;
  7.         q = p; p = r;
  8.     }
  9.     return p;
  10. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2008-06-19 14:00 |只看该作者
原帖由 sunchiang 于 2008-6-11 15:32 发表


你的意思是先把链表节点入栈然后再出栈形成新链表么?似乎不满足“就地”条件啊。肯定是需要临时变量的,有没有具体算法给贴几个?


“栈”是指一种思路,不是非要用什么特殊的数据结构:
void reverse(Node **head)
{
    Node *old_head = *head;
    Node *new_head = NULL;
    while (old_head)
    {
        Node *tmp = old_nead;
        old_head = old_head->next;
        tmp->next = new_head;
        new_head = tmp;
    }

    *head = new_head;
}


每次从旧链表的头部取一个节点,然后插入到新链表的头部,实际上就相当于一个出栈和一个入栈。

论坛徽章:
0
8 [报告]
发表于 2008-06-19 14:03 |只看该作者
刚发现和楼上的方法实际上是一样的,呵呵。许多人做这个问题总是想着再指向next的next,导致还要处理只有一个节点的特殊情况。

论坛徽章:
0
9 [报告]
发表于 2008-06-19 16:07 |只看该作者
谢谢LS的兄弟们:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP