#include <stdio.h> typedef struct node { int val; node* next; }; node* reverse(node* li ...
最近在做笔试题时,遇到一道编程题:单向链表反转算法。一时紧张,没写出来就提前交卷了,然而交完卷就想出来了。。。 最初想出来的是递归版,遗憾的是没能做到尾递归,后来又琢磨出了迭代版。后来用实际编译运行测试了一遍,能正常运行。 递归版的灵感来源于 Haskell 趣学指南 中非常简洁的快速排序算法的实现,其思想是将单向链表分割头部和尾部。其中头部指是链表的第一个节点,尾部是指除去第一个节点后的子链表 ...
2017-04-17 07:38 1 11022 推荐指数:
#include <stdio.h> typedef struct node { int val; node* next; }; node* reverse(node* li ...
最近在看链表,今天刷到一道链表的反转题,链表反转可以说是基础操作,但是可提供的方案也有很多,简单通过了该题后又学习了一下递归反转,现在把三种方法都公开出来做一个总结。 1.就地逆置 2.单参数的递归逆置 3.双参数的递归逆置 一、就地逆置 方法:头插。 由于这里是不带表头结点的单向链表 ...
最近在 LeetCode 上面玩 链表 类型的题目,所以打算写一篇文章,分享一下在做链表类型题目的心得。 众所周知,玩链表就是玩指针,今天跟大家讲解一个链表的入门题目,如何反转一个单向链表 也是 LeetCode #206 是很热门的一道编程题 LC#206 Reverse Linked ...
如果不要求“原地”,正向遍历原链表,头插法建立一个新的单向链表,它就是原链表的逆序。 下面利用递归的方法将单向链表原地逆序。 可以很容易地把递归改写成非递归的形式。 NODE* inverse(NODE *head){ if(head==NULL) return ...
这次介绍经常在面试中被问到的单向链表的反转问题,问题的解决方法有多种 最普通的是从头到尾扫描链表,然后对链表进行反转。 使用单个参数的递归方法;使用单个参数是相当于不断的往链表后部深入,并且在每次深入的递归中保存了下一个节点和当前节点的信息,再调用递归后处理当前节点和下一个节点的关系 ...
单向链表反转的方法有很多,其中用的比较多的是迭代法和递归法,迭代法通俗易懂,递归法相对来说比较难理解一些。 最近读了一些网上的文章对这两种算法的解释后,有些自己的理解分享出来供大家参考。 单向链表反转图示: 一、迭代法 迭代法的解题思路是:通过循环遍历的方式,使链表的每一个节点 ...
单向链表反转,一道常见的面试题,动手实现下。 原理就是把cur节点的next节点保存,把next指向pre节点,把之前保存的next节点赋给cur,不断循环直到next节点为NULL。注意下,退出循环后要把cur节点next指向pre节点。把cur节点返回,大功告成。 如果不用 ...
[本文出自天外归云的博客园] 链表是由节点构成的,一个指针代表一个方向,如果一个构成链表的节点都只包含一个指针,那么这个链表就是单向链表。 单向链表中的节点不光有代表方向的指针变量,也有值变量。所以我们定义链表,就是要定义链表中的节点,对链表的操作最后也就是对节点的操作。 这些包含数据的节点 ...