首页 > 其他分享 >[剑指offer] 链表篇

[剑指offer] 链表篇

时间:2023-09-15 10:23:48浏览次数:64  
标签:ListNode offer res next 链表 listNode null public

JZ6 从尾到头打印链表

  1 /* 从尾到头递归 */
  2 public class JZ6_1
  3 {
  4     private static ArrayList<Integer> res = new ArrayList<>();
  5 
  6     public static ArrayList<Integer> printListFromTailToHead(ListNode listNode)
  7     {
  8         if (listNode != null)
  9         {
 10             printListFromTailToHead(listNode.next);
 11             res.add(listNode.val);
 12         }
 13         return res;
 14     }
 15 }
 16 
 17 /* ArrayList.add(int index, E element) */
 18 public class JZ6_2
 19 {
 20     public static ArrayList<Integer> printListFromTailToHead(ListNode listNode)
 21     {
 22         ArrayList<Integer> res = new ArrayList<>();
 23         while (listNode != null)
 24         {
 25             res.add(0, listNode.val);
 26             listNode = listNode.next;
 27         }
 28         return res;
 29     }
 30 }
 31 
 32 /* 栈 */
 33 public class JZ6_3
 34 {
 35     public static ArrayList<Integer> printListFromTailToHead(ListNode listNode)
 36     {
 37         ArrayList<Integer> res = new ArrayList<>();
 38         Stack<Integer> temp = new Stack<>();
 39         while (listNode != null)
 40         {
 41             temp.add(listNode.val);
 42             listNode = listNode.next;
 43         }
 44         while (!temp.isEmpty())
 45         {
 46             res.add(temp.pop());
 47         }
 48         return res;
 49     }
 50 }
 51 
 52 /* 原地反转链表 */
 53 public class JZ6_4
 54 {
 55     public static ArrayList<Integer> printListFromTailToHead(ListNode listNode)
 56     {
 57         ListNode pre = null, cur = listNode, temp = null;
 58         ArrayList<Integer> res = new ArrayList<>();
 59         while (cur != null)
 60         {
 61             temp = cur.next;
 62             cur.next = pre;
 63             pre = cur;
 64             cur = temp;
 65         }
 66         while (pre != null)
 67         {
 68             res.add(pre.val);
 69             pre = pre.next;
 70         }
 71         return res;
 72     }
 73 }
 74 
 75 /* 递归反转链表 */
 76 public class JZ6_5
 77 {
 78     public static ArrayList<Integer> printListFromTailToHead(ListNode listNode)
 79     {
 80         ArrayList<Integer> res = new ArrayList<>();
 81 
 82         ListNode reverseList = reverse(listNode);
 83         while (reverseList != null)
 84         {
 85             res.add(reverseList.val);
 86             reverseList = reverseList.next;
 87         }
 88         return res;
 89     }
 90 
 91     public static ListNode reverse(ListNode node)
 92     {
 93         if (node == null || node.next == null) return node;
 94         ListNode fir = node, sec = node.next;
 95         fir.next = null;
 96         ListNode temp = sec;
 97         ListNode reverse = reverse(sec);
 98         temp.next = fir;
 99         return reverse;
100     }
101 }

 JZ24 反转链表

 1 /* 从尾到头递归 */
 2 public class JZ24_1
 3 {
 4     public static ListNode res, tail;
 5 
 6     public static ListNode ReverseList(ListNode listNode)
 7     {
 8         if (listNode != null)
 9         {
10             ReverseList(listNode.next);
11             if (res == null)
12                 res = tail = listNode;
13             else
14             {
15                 tail.next = listNode;
16                 tail = tail.next;
17                 tail.next = null;
18             }
19         }
20         return res;
21     }
22 }
23 
24 /* 栈 */
25 public class JZ24_2
26 {
27     public static ListNode ReverseList(ListNode listNode)
28     {
29         ListNode head = new ListNode(-1), tail = head;
30         Stack<Integer> temp = new Stack<>();
31         while (listNode != null)
32         {
33             temp.add(listNode.val);
34             listNode = listNode.next;
35         }
36         while (!temp.isEmpty())
37         {
38             tail.next = new ListNode(temp.pop());
39             tail = tail.next;
40         }
41         return head.next;
42     }
43 }
44 
45 /* 原地反转链表 */
46 public class JZ24_3
47 {
48     public static ListNode ReverseList(ListNode listNode)
49     {
50         ListNode pre = null, cur = listNode, temp = null;
51         while (cur != null)
52         {
53             temp = cur.next;
54             cur.next = pre;
55             pre = cur;
56             cur = temp;
57         }
58         return pre;
59     }
60 }
61 
62 /* 递归反转链表 */
63 public class JZ24_4
64 {
65     public static ListNode ReverseList(ListNode listNode)
66     {
67         if (listNode == null || listNode.next == null) return listNode;
68         ListNode fir = listNode, sec = listNode.next;
69         fir.next = null;
70         ListNode temp = sec;
71         ListNode reverse = ReverseList(sec);
72         temp.next = fir;
73         return reverse;
74     }
75 }

 

标签:ListNode,offer,res,next,链表,listNode,null,public
From: https://www.cnblogs.com/VividBinGo/p/17704244.html

相关文章

  • 链表
    1、单向链表//节点的定义publicclassGoodsNode{publicStringname;publicdoubleprice;//指向下一个节点的指针publicGoodsNodenext;//构造方法publicGoodsNode(){}publicGoodsNode(Stringname,doubleprice){......
  • 代码随想录算法训练营第8天| ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 0
    344.反转字符串mydemo--(一次就过)--(成功)classSolution{public:voidreverseString(vector<char>&s){intlen=s.size();chartmp;inti=0;intj=len-1;while(i<j){tmp=s[i];......
  • 剑指Offer面试题3题目二:不修改数组找出重复的数字
    一、题目在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或3。输入参数:一个整数数组numbers,......
  • 剑指 Offer 41. 数据流中的中位数
    classMedianFinder{public:/**initializeyourdatastructurehere.*///注意小根堆的定义方式priority_queue<int,vector<int>,greater<int>>up;//小根堆,默认放从大到小后一半的数priority_queue<int>down;//大根堆,默认放从小到大排序前一半......
  • 爆肝总结2023Android面试,看完学会它,公司追着给你offer
    前言想要在面试中脱颖而出吗?想要在最短的时间内快速掌握Android的核心知识点吗?想要成为一位优秀的Android工程师吗?本篇文章能助你一臂之力!金九银十,目前正值招聘求职旺季,很多朋友对一些新技术名词都能侃侃而谈,但对一些核心原理理解的不够透彻,特别是对Android的一些核心基础知识点掌......
  • 剑指offer面试题3:数组中重复的数字
    一、知识点:数组相关知识二、描述在一个长度为n的数组里的所有数字都在0~n-1范围内,数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道重复几次。请找出数组中任意一个重复的数字,例如:输入长度为7的数组[2,3,2,4,3,3,5],那么输出2或者3都是正确的,存在不合法的输入的话输出-1。......
  • 数据结构之链表
    说明链表是数据结构中的线性结构,用于存储一系列元素(节点),其中每个元素都包含一个指向下一个元素的引用。链表由一组节点组成,每个节点包含两个部分:数据和指向下一个节点的指针(或引用)。线性结构中对比数组/列表的优势:插入和删除性能较好涉及的概念:1.节点:节点包括2个域,元素域、......
  • 剑指 Offer 67. 把字符串转换成整数
    题目链接:剑指Offer67.把字符串转换成整数题目描述:写一个函数StrToInt,实现把字符串转换成整数这个功能。不能使用atoi或者其他类似的库函数。解法思路:直接模拟题代码:funcstrToInt(sstring)int{s=strings.Trim(s,"")minus:=1varansint64=......
  • day03 - 链表part01
    力扣203.移除链表元素没有难度,只需掌握一个思路,即因为每次删除元素时,我们需要该元素的前一个元素的指针来操作,那么如果删除第一个元素呢?他的前一个元素无法获取因此需要进行特殊处理,而我们可以设置一个虚拟节点作为头结点,这样链表的每个元素的处理方式就统一了。代码如下ListN......
  • Java有关链表的基本操作
    上一篇发表的数组的基本操作,但是数组有优势也有劣势:·具体的优势是:拥有高效的随机访问能力·劣势是:由于排列紧密相连,插入和删除元素都会导致大量元素被迫移动,影响效率。接下来要阐述的数据结构是链表:·先看看单向链表的结构:单向链表的每一个节点又包含两个部分,一部分......