每日算法 -- 链表
1721. 交换链表中的节点
分析
- 快慢指针的典型做法
- 一般情况下是不推荐交换节点直接交换值的
- 但是懒啊,所以先这样吧,不然删增节点又得判断
// 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 春招闯关活动」, 点击查看 活动详情