趣味算法题

越刷越上头的趣味算法题
帅旋
关注
充电
IT宅站长,技术博主,架构师,全网id:arthinking。

迭代法轻松拿下反转链表

发布于 2024-03-15 | 更新于 2024-08-21

题目:206. 反转链表[1]

如果您已经有思路了,或者是N刷了,可以先自己写一遍。

题目分析

反转链表是链表操作中的基本问题之一,可以通过双指针法+迭代法解决。

注意:反转链表题目中要处理的是单向链表,维护单向链表的指针指向。

处理方法:直接遍历链表,先存储下一个节点,在处理当前节点,然后双指针分分前移。

1
2
3
 a -> b -> c -> d
^ ^
prev curr

解题思路

  1. 初始化两个指针prev(前一个节点)初始化为 nullcurrent(当前节点)初始化为链表的头节点 head
  2. 遍历链表:在链表上移动 current 指针,直到链表的末尾。
  3. 反转指针:在遍历链表时,逐个反转节点的 next 指针,使其指向前一个节点。
  4. 更新头节点:当遍历完成后,prev 将指向新的头节点。

Java解法

下面是使用Java语言的解法:

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
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode curr = head;
while (curr != null) {
// 下一个节点先存储起来
ListNode next = curr.next;
// 当前节点指针指向前一个节点
curr.next = pre;
// 双指针分分前移
pre = curr;
curr = next;
}
return pre;
}
}

References


  1. 206. 反转链表. Retrieved from https://leetcode.cn/problems/reverse-linked-list/ ↩︎

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/algorithm/reverse-linked-list.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。

请帅旋喝一杯咖啡

咖啡=电量,给帅旋充杯咖啡,他会满电写代码!

IT宅

关注公众号及时获取网站内容更新。