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

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */
 
function reverseList(head: ListNode | null): ListNode | null {
    let newListHead = null
    
    while(head){
        //1. 拷贝 val,next 直接取每次遍历的 pre_node
        const newNode = new ListNode(head.val,newListHead)
        newListHead = newNode
        head =head.next
    }
    return newListHead
};

更好的解:

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */
 
function reverseList(head: ListNode | null): ListNode | null {
    let pre = null
    let curr = head
    while(curr){ 
        //1. 暂存下一个节点
        let next = curr.next
        //2. 将下一个指向pre
        curr.next = pre
        //3. 更新 pre
        pre = curr
        //4. 前进
        curr = next
    }
    return pre
};