原文:单向链表反转算法——递归版和迭代版

最近在做笔试题时,遇到一道编程题:单向链表反转算法。一时紧张,没写出来就提前交卷了,然而交完卷就想出来了。。。 最初想出来的是递归版,遗憾的是没能做到尾递归,后来又琢磨出了迭代版。后来用实际编译运行测试了一遍,能正常运行。 递归版的灵感来源于 Haskell 趣学指南 中非常简洁的快速排序算法的实现,其思想是将单向链表分割头部和尾部。其中头部指是链表的第一个节点,尾部是指除去第一个节点后的子链表 ...

2017-04-17 07:38 1 11022 推荐指数:

查看详情

单向链表反转,就地逆置与递归反转(无表头结点)

最近在看链表,今天刷到一道链表反转题,链表反转可以说是基础操作,但是可提供的方案也有很多,简单通过了该题后又学习了一下递归反转,现在把三种方法都公开出来做一个总结。 1.就地逆置 2.单参数的递归逆置 3.双参数的递归逆置 一、就地逆置 方法:头插。 由于这里是不带表头结点的单向链表 ...

Wed Sep 04 05:35:00 CST 2019 0 390
算法入门题:如何反转一个单向链表

最近在 LeetCode 上面玩 链表 类型的题目,所以打算写一篇文章,分享一下在做链表类型题目的心得。 众所周知,玩链表就是玩指针,今天跟大家讲解一个链表的入门题目,如何反转一个单向链表 也是 LeetCode #206 是很热门的一道编程题 LC#206 Reverse Linked ...

Thu Dec 24 00:55:00 CST 2020 1 514
单向链表原地反转

如果不要求“原地”,正向遍历原链表,头插法建立一个新的单向链表,它就是原链表的逆序。 下面利用递归的方法将单向链表原地逆序。 可以很容易地把递归改写成非递归的形式。 NODE* inverse(NODE *head){ if(head==NULL) return ...

Sun Jun 10 01:49:00 CST 2012 0 3535
单向链表反转问题

这次介绍经常在面试中被问到的单向链表反转问题,问题的解决方法有多种 最普通的是从头到尾扫描链表,然后对链表进行反转。 使用单个参数的递归方法;使用单个参数是相当于不断的往链表后部深入,并且在每次深入的递归中保存了下一个节点和当前节点的信息,再调用递归后处理当前节点和下一个节点的关系 ...

Mon Sep 30 04:32:00 CST 2013 1 8753
一文读懂链表反转迭代法和递归法)

单向链表反转的方法有很多,其中用的比较多的是迭代法和递归法,迭代法通俗易懂,递归法相对来说比较难理解一些。 最近读了一些网上的文章对这两种算法的解释后,有些自己的理解分享出来供大家参考。 单向链表反转图示: 一、迭代迭代法的解题思路是:通过循环遍历的方式,使链表的每一个节点 ...

Mon Jul 06 02:11:00 CST 2020 1 3490
C++ 单向链表反转

单向链表反转,一道常见的面试题,动手实现下。 原理就是把cur节点的next节点保存,把next指向pre节点,把之前保存的next节点赋给cur,不断循环直到next节点为NULL。注意下,退出循环后要把cur节点next指向pre节点。把cur节点返回,大功告成。 如果不用 ...

Fri Jan 24 20:14:00 CST 2014 0 2738
Python3玩转单链表——逆转单向链表pythonic

[本文出自天外归云的博客园] 链表是由节点构成的,一个指针代表一个方向,如果一个构成链表的节点都只包含一个指针,那么这个链表就是单向链表单向链表中的节点不光有代表方向的指针变量,也有值变量。所以我们定义链表,就是要定义链表中的节点,对链表的操作最后也就是对节点的操作。 这些包含数据的节点 ...

Tue Mar 27 02:08:00 CST 2018 0 1042
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM