题目描述:

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

解题思路:

递归或迭代解决。

双指针迭代:
我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。
第二个指针 cur 指向 head,然后不断遍历 cur。
每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。

Java实现:

lass Solution {public ListNode reverseList(ListNode head) {//申请节点,pre和 cur,pre指向nullListNode pre = null;ListNode cur = head;ListNode tmp = null;while(cur!=null) {//记录当前节点的下一个节点tmp = cur.next;//然后将当前节点指向precur.next = pre;//pre和cur节点都前进一位pre = cur;cur = tmp;}return pre;}
}

迭代实现:

递归的两个条件:

终止条件是当前节点或者下一个节点==null
在函数内部,改变节点的指向,也就是 head 的下一个节点指向 head 递归函数那句

head.next.next = head
很不好理解,其实就是 head 的下一个节点指向head。
递归函数中每次返回的 cur 其实只最后一个节点,在递归函数内部,改变的是当前节点的指向。

class Solution {public ListNode reverseList(ListNode head) {//递归终止条件是当前为空,或者下一个节点为空if(head==null || head.next==null) {return head;}//这里的cur就是最后一个节点ListNode cur = reverseList(head.next);//这里请配合动画演示理解//如果链表是 1->2->3->4->5,那么此时的cur就是5//而head是4,head的下一个是5,下下一个是空//所以head.next.next 就是5->4head.next.next = head;//防止链表循环,需要将head.next设置为空head.next = null;//每层递归函数都返回cur,也就是最后一个节点return cur;}
}

leetcode206题:反转链表(迭代或是递归)相关推荐

  1. 《LeetCode力扣练习》第206题 反转链表 Java

    <LeetCode力扣练习>第206题 反转链表 Java 一.资源 题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2, ...

  2. LeetCode 206 Reverse Linked List--反转链表--迭代与递归解法--递归使用一个临时变量,迭代使用3个

    此题链接:Reverse Linked List - LeetCode Reverse a singly linked list. Example: Input: 1->2->3-> ...

  3. 剑指Offer - 面试题24. 反转链表(遍历/递归)

    1. 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-&g ...

  4. 反转链表问题的递归解法

    目录 一.反转整个链表 二.反转部分链表 一.反转整个链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 首先在方法中我们需要判断递归终止的情况,如果head==null或者he ...

  5. leetcode算法题--反转链表

    题目链接:https://leetcode-cn.com/problems/reverse-linked-list/ 这个题目用迭代和递归的方法都能做,但是代码很精致,需要些脑洞. 1.迭代 List ...

  6. 牛客网(剑指offer) 第十五题 反转链表

    //题目描述:输入一个链表,反转链表后,输出该链表的所有元素. <?php /*class ListNode{var $val;var $next = NULL;function __const ...

  7. [剑指offer][JAVA]面试题第[24]题[反转链表][递归][双指针][头插法]

    [问题描述][中等] 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点.示例:输入: 1->2->3->4->5->NULL 输出: 5->4 ...

  8. leetcode算法题--反转链表 II★

    原题链接:https://leetcode-cn.com/problems/reverse-linked-list-ii/ 1.头插法 ListNode* reverseBetween(ListNod ...

  9. 程序员面试题100题第19题——反转链表

    1 .链表相邻元素翻转 2 .题目:输入一个链表的头结点,反转该链表,返回反转后链表的头结点: LNode* ReverseLinkList(LNode* head)//带头结点 {if(head = ...

  10. leetcode算法题--反转链表★

    原题链接: https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/ https://leetcode-cn.com/problems/re ...

最新文章

  1. python模拟全部代码_Python模拟登陆实现代码
  2. python改变字符串类型_python – Sklearn将字符串类标签更改为int
  3. 使用 JavaScript 进行 Base64 编码与解码
  4. SUSE各个系统版本安装saltstack方法
  5. 自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法
  6. [Vue] Computed property XXX was assigned to but it has no setter.
  7. Android反编译分析工具
  8. BetterScroll、移动端、滚动事件,如何使用
  9. oncreate 测量尺寸
  10. linux 终止作业任务命令,linux-尝试终止进程时出错—“ kill:pid:参数必须是进程或作业ID”...
  11. 洛谷P1005 矩阵取数游戏
  12. Spotfire 筛选器类型修改
  13. java中特殊符号_java中的特殊字符集合
  14. Android软件常用下载地址
  15. windows提升效率神器
  16. docker 部署 gitlab gitlab-runner 实现 CI
  17. LDC1000 AD原件封装分享
  18. 使用unity实现桌面宠物
  19. CUMTOJ算法作业二
  20. 攻防世界——robots

热门文章

  1. zz 聊聊并发(二)
  2. 【SQL】找出行数与自增标识值不相等的表(即有缺行)
  3. 数组图形的一些数学操作 有可能考试会遇到哦
  4. 数据库-MySQL-数据库设计-外键
  5. win10录屏工具_win10录屏软件选哪款?没用过别后悔
  6. python连接数据库设置编码_Python学习18-连接数据库
  7. Kyligence李扬:数据智能推荐成为技术发展新方向
  8. 另辟蹊径第二弹,时间规律里的秘密
  9. MySQL is running but PID file could not be found(在macOS系统下解决方法)
  10. PostgreSQL的常见参数和技巧