devbox
很楠不爱3
这个屌丝很懒,什么也没留下!
当前位置:   article > 正文

链表反转

链表反转

链表反转

题目参考 反转链表


目录

链表反转

创建节点 ListNode

迭代反转

步骤图解

 代码实现

递归反转

步骤图解

代码实现


 

 

链表的反转是非常基础的一种操作,在《剑指Offer》以及其他大部分面试书中基本都有这个简单的题目作为铺垫。首先分析旋转:

链表的反转有两种方式:一种是递归;一种是迭代

本篇文章就两种方式进行分析以及实现

 

创建节点 ListNode

  1. public class ListNode {
  2. int val;
  3. ListNode next;
  4. ListNode(int x) { val = x; }
  5. }

 

迭代反转

迭代反转是从链表的开头一个一个反转到结束

步骤图解

时间复杂度:O(n),假设 nn 是列表的长度,时间复杂度是 O(n)。

空间复杂度:O(1)。

 代码实现

  1. public ListNode reverseList(ListNode head) {
  2. ListNode result = null;
  3. ListNode current = head;
  4. while(current!=null){
  5. ListNode tempNode = current.next;
  6. current.next = result;
  7. result = current;
  8. current = tempNode;
  9. }
  10. return result;
  11. }

 

递归反转

思路可拆分为

从尾部开始递归,一直反转到头部,实现整个链表的反转

步骤图解

递归对于迭代要稍微难理解一点,不过仔细思考思考还是能理解出来的。

代码实现

  1. public ListNode reverseList(ListNode head) {
  2. if (head == null || head.next == null) return head;
  3. ListNode p = reverseList(head.next);
  4. head.next.next = head;
  5. head.next = null;
  6. return p;
  7. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/209969
推荐阅读
相关标签
  

闽ICP备14008679号