LeetCode——24. 两两交换链表中的节点

99 阅读1分钟

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

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

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

解题思路

  • 设置一个哨兵节点 prev
  • 设置需要交换的两个节点分别为a、b,同时设置b的下一个节点next

完整代码

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var swapPairs = function(head) {
    let node = new ListNode(0)
    node.next = head 
    let prev = node
    while(prev.next && prev.next.next){
        let [a,b] = [prev.next,prev.next.next];
        [prev.next,b.next,a.next,prev] = [b,a,b.next,a]
    }
    return node.next
};

性能

时间复杂度: O(n)

空间复杂度: O(1)