Skip to content

两两交换链表中的节点

LeetCode-24

js
var swapPairs = function(head) {
  // 头部虚拟节点,next指针指向头节点
  let dummyHead = new ListNode()
  dummyHead.next = head

  // temp指针
  let temp = dummyHead
  // 有两个存在的节点才进行交换
  while(temp.next && temp.next.next) {
    let node1 = temp.next // temp指针后的节点1
    let node2 = temp.next.next // temp指针后的节点2

    temp.next = node2 // 1.先将temp的next指针指向node2
    node1.next = node2.next // 2.再把节点1的next指向节点2的next
    node2.next = node1 // 3.最后把节点2的next指向节点1完成本轮交换

    // temp指针移动到下一次交换组的前一个节点
    temp = node1
  }
  return dummyHead.next // 返回头节点
}