[路飞]leetcode-24. 两两交换链表中的节点

103 阅读1分钟

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。力扣原文链接

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

两两交换链表中的节点,其实可以用k-个一组翻转链表->reverseKGroup(head,2)。

但是两两交换使用reverseKGroup 代码量过大,所以可以从新写一个

 var swapPairs = function(head) {
     if(!head||!head.next)return null
    let emptyNode=new ListNode(0,head)
    let pre=emptyNode,cur=pre.next
    while(cur.next){
        let next=cur.next
        cur.next=next.next
        pre.next=next
        next.next=cur
         // 因为两两交换,
        // cur是每次交换的第一个节点,
        // pre是第一个节点的上一个基点
        pre=cur
        cur=cur.next
    }
    return emptyNode.next
};