算法笔记-翻转链表

2024-04-09

# 翻转链表

前言:这题算是简单 双指针就能解决 这题倒是让我想起今天写节点编辑器的问题 策划要一个废话节点 废话说完回到废话头 一个树里还有好几个头 ,没办法 节点直接的连接不是双向的 也就是只有上一个节点持有下一个节点 我只能让每个废话节点都要有根节点的引用……

# 题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

img
img

1
2
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

img
img

1
2
输入:head = [1,2]
输出:[2,1]

示例 3:

1
2
输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

** 进阶:** 链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

? 还要递归 递归又容易爆栈又容易错 去 tm 的 递归都给爷爬 不写递归!(好好好 晚点写 晚点写)

# 题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode temp = new();

// //只有一个头结点 这里考虑错了 应为链表可能为空
// if(cur.next == null) {
// return head;
// }

while(cur != null){
//需要保存一个temp 记录cur.next
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}

return pre;
}
}

我在边界考虑的时候有点考虑多余了 忘记了 还有可能出现空链表的情况。

感觉笔记得算是日记了 毕竟每天都得逼自己记!