反转链表

25 阅读1分钟

翻转链表

力扣题目链接(opens new window)

题意:反转一个单链表。

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

解法

这道题目相对简单,只需要定义一个虚拟头节点,就可以解决。

代码

function reverseList(head: ListNode | null): ListNode | null {
    let pre = null
    let cur = head 

    while(cur) {
        const cache = cur.next
        cur.next = pre
        pre = cur
        cur = cache
    }
    return pre
};

24. 两两交换链表中的节点

力扣题目链接(opens new window)

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

24.两两交换链表中的节点-题意

解法

这道题和上一道翻转链表有一定区别。解题思路是将一个链表中节点按每两个节点分成一个个区间,分别进行处理。同样需要一个虚拟头节点,用来统一处理逻辑。

截屏2025-09-02 15.58.27.png

代码

function swapPairs(head: ListNode | null): ListNode | null {
    let pre  =  new ListNode(0, head)
    let realHead = pre
    while(pre.next && pre.next.next) {
        const cache = pre.next.next
        pre.next.next = pre.next.next.next
        cache.next = pre.next
        pre.next = cache
        pre = cache.next
    }

    return realHead.next
};