[HOT 100] 0206. 反转链表

文章目录

      • 1. 题目链接
      • 2. 题目描述
      • 3. 题目示例
      • 4. 解题思路
      • 5. 题解代码
      • 6. 复杂度分析

1. 题目链接


206. 反转链表 - 力扣(LeetCode)

2. 题目描述


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


3. 题目示例


示例 1 :

[HOT 100] 0206. 反转链表_第1张图片

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

示例 2 :

[HOT 100] 0206. 反转链表_第2张图片

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

4. 解题思路


  1. 初始化指针:使用两个指针 precurpre 初始化为 nullcur 初始化为头节点 head
  2. 遍历链表:在循环中,每次处理当前节点 cur
    • 保存当前节点的下一个节点 nxt
    • 将当前节点的 next 指向 pre,实现局部反转。
    • 移动 precur 到下一个位置。
  3. 终止条件:当 curnull 时,所有节点处理完毕,此时 pre 指向新链表的头节点。

5. 题解代码

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;   // 前驱节点,初始化为null(反转后的尾节点)
        ListNode cur = head;   // 当前节点,从头节点开始遍历

        while (cur != null) {  // 遍历链表直到末尾
            ListNode nxt = cur.next; // 保存当前节点的下一个节点,防止断链
            cur.next = pre;    // 反转操作:当前节点指向前驱节点
            pre = cur;         // 前驱节点后移
            cur = nxt;         // 当前节点后移
        }

        return pre; // 最终pre指向新链表的头节点
    }
}


6. 复杂度分析


  • 时间复杂度:O(n),每个节点仅遍历一次。
  • 空间复杂度:O(1),仅使用固定数量的临时变量。

你可能感兴趣的:(链表,算法,HOT,100)