交换链表中的节点|刷题打卡

我心飞翔 分类:javascript

每日算法 -- 链表

1721. 交换链表中的节点

1721. 交换链表中的节点

分析

  1. 快慢指针的典型做法
  2. 一般情况下是不推荐交换节点直接交换值的
  3. 但是懒啊,所以先这样吧,不然删增节点又得判断
// 1721. 交换链表中的节点
// https://leetcode-cn.com/problems/swapping-nodes-in-a-linked-list/

/**
 * @分析
 * 1. 使用快慢指针求出两个节点 
 */
var swapNodes = function(head, k) {
    if(!head || !head.next) return head
    let emptyNode = new ListNode()
    emptyNode.next = head
    let fast = slow = emptyNode
    while(k--){
        // 先走 k 步,正向求得节点
        fast = fast.next
    }
    // 这个时候的 fast 节点就是正数第k个节点
    let temp = fast
    while(fast){
        fast =fast.next
        slow = slow.next
    }
    // 这个时候的 slow 节点就是反数第k个节点
    // 由于只是值交换,所以直接改变值算了
    let val = slow.val
    slow.val =  temp.val
    temp.val  = val
    return emptyNode.next
};
 

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情

回复

我来回复
  • 暂无回复内容