代码随想录Day4打卡 链表(2)

60 阅读1分钟

24.两个一组翻转链表

使用递归方法:

var swapPairs = function(head) {
    // base case:当头节点和头节点下一个节点都为空,则返回
    if (head === null || head.next === null) {
        return head
    }
    // 第二个节点
    const next = head.next
    // 从第三个节点开始,进行递归
    const newNode = swapPairs(next.next)
    // 第二个节点的下一个是第一个节点
    next.next = head
    // 第一个节点的下一个节点是递归后的结果
    head.next = newNode
    // 返回第二个节点
    return next
};

19.删除链表的倒数第n个节点

使用快慢指针,先走到n节点处,再一起向前直到快指针指向链表的尾部。这时候慢指针会正好在len-n处

var removeNthFromEnd = function(head, n) {
    let fast = head;
    while (n > 0) {
        fast = fast.next;
        n -= 1;
    }

    let slow = head;
    const dummy = new ListNode(-1, head);
    let prev = dummy;
    while (fast !== null) {
        slow = slow.next;
        fast = fast.next;
        prev = prev.next;
    }

    prev.next = slow.next;
    return dummy.next;

};