【剑指 Offer 31 天打卡计划】#4 反转链表

73 阅读1分钟

题目

难度:⭐️⭐️

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

提示:

0 <= 节点个数 <= 5000

题解

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    let prev = null
    let curr = head
    while(curr!==null){
        const next = curr.next
        curr.next = prev
        prev = curr
        curr = next
    }
    return prev
};

笔记

先定义一个 prev 暂存,循环内定义一个 next 常量

prev(null)  node1(curr)->node2(next)->nodex3->null

prev(null)<-node1(curr)  node2(next)->nodex3->null

null<-node1(prev)  node2(curr)->nodex3(next)->null

null<-node1(prev)<-node2(curr)  nodex3(next)->null

null<-node1<-node2(prev)  nodex3(curr)->null(next)