essay

hot100-反转链表

#算法

hot100——反转链表

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

示例 1:
image.png
输入:head = [1,2,3,4,5]

输出:[5,4,3,2,1]

示例 2:
image.png

输入:head = [1,2]

输出:[2,1]

示例 3:

输入:head = []

输出:[]

提示:

链表中节点的数目范围是 [0, 5000]

-5000 <= Node.val <= 5000

func reverseList(head *ListNode) *ListNode {
    // prev 指向已反转部分的头节点,初始时没有已反转部分,所以为 nil
    var prev *ListNode = nil
    // curr 指向当前正在处理的节点,从原链表的头节点开始
    curr := head
    // 只要当前节点不为空,就继续处理
    for curr != nil {
        // 1. 保存当前节点的下一个节点,防止反转指针后丢失后续链表
        next := curr.Next  
        // 2. 将当前节点的 Next 指针指向前一个节点(即反转方向)
        curr.Next = prev
        // 3. 将 prev 向前移动:现在 curr 已加入反转部分,成为新的头
        prev = curr
        // 4. 将 curr 向前移动到下一个待处理的节点(即之前保存的 next)
        curr = next
    }
    // 循环结束时,curr 为 nil,prev 指向原链表的最后一个节点,
    // 也就是反转后新链表的头节点,因此返回 prev
    return prev
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接