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

423 阅读1分钟

力扣题目链接

题意:

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

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

image.png

image.png

思路:

  • 从交换链表中两个元素想起,链表位置的变换即链表元素的next属性的变换。交换链表中的两个元素的位置即是将他们的next属性更改
  • 现在给定三个链表元素,curren,p1,p2,current指向p1,p1指向p2,交换p1和p2
  • 首先让current指向p2,再让p1指向p2.next,再让p2指向p1。然后将current赋值为n1。即不断改变他们的next指向,再让current指针在交换完一对元素后向下移动一位
var swapPairs = function(head) {
    let dummy = new ListNode()
    dummy.next = head//定义一个虚拟头节点
    let current = dummy
    while(current.next && current.next.next){//使有两个元素能互换位置
        let n1 = current.next
        let n2 = current.next.next//起始状态:current指向n1,n1指向n2,交换n1n2指向
        current.next = n2
        n1.next = n2.next
        n2.next = n1
        current = n1
    }
    return dummy.next
};