LeetCode-热题100:206. 反转链表

题目描述

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

代码及注释

go 复制代码
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseList(head *ListNode) *ListNode {
    // 定义一个pre指针,初始化为nil
    var pre *ListNode
    // cur指针指向头节点
    cur := head
    // 循环遍历链表
    for cur != nil {
        // 保存当前节点的下一个节点
        next := cur.Next
        // 将当前节点的next指针指向pre
        cur.Next = pre
        // pre和cur节点都向前移动一位
        pre = cur
        cur = next
    }
    // 最后,pre指向新的头节点
    return pre
}

代码解释

  1. 初始化prenil,这是反转链表时新链表的尾节点。
  2. 使用cur遍历原链表,cur指向当前遍历到的节点。
  3. 在循环中,首先保存cur的下一个节点到next
  4. curNext指针指向pre,这一步是实现反转的关键。
  5. 然后移动precur,将cur移到下一个节点。
  6. 循环直到curnil,表示原链表已经遍历完。
  7. 返回pre,即新的头节点。

这样,原链表就被完全反转了。

相关推荐
昵称小白1 分钟前
图论专题(上)
算法·深度优先·图论
大大杰哥2 分钟前
leetcode hot100(2)双指针,滑动窗口
数据结构·算法·leetcode
平凡但不平庸的码农3 分钟前
Go 语言基础语法
开发语言·后端·golang
风筝在晴天搁浅5 分钟前
LeetCode CodeTop 113.路径总和Ⅱ
算法·leetcode
张赫轩(不重名)6 分钟前
加权重心(换根DP)
c++·算法·动态规划·图论
水木流年追梦10 分钟前
【python因果库实战26】逆概率加权模型1
开发语言·python·算法·leetcode
2401_8401052013 分钟前
题解: [GESP202409 八级] 美丽路径
数据结构·c++·算法·动态规划
今儿敲了吗17 分钟前
链表篇(五)——链表中间结点
数据结构·笔记·算法·链表
码农的神经元21 分钟前
2026 年数维杯A 题:抱轨式磁浮列车的悬浮电磁铁故障检测问题
人工智能·算法·数学建模
SiYuanFeng21 分钟前
面试大厂leetcode重点题型简洁明快复习(dfs/bfs,动态规划,链表,滑动窗口/双指针,回溯,ACM型输入输出,二分)
leetcode·面试·coding