Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
Tags
LinkedList
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
var prev, next;
=>prev=>node=>node.next=>next
Find a general node, we can figure out the rule if swapping between two different nodes:
var next = node.next.next;
prev.next = node.next;
node.next.next = node;
prev = node;
After the changes above, we can get two nodes swapped.
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var swapPairs = function (head) {
if (head === null || head.next === null) {
return head;
}
var node = head;
var newNode = new ListNode(-1);
var prev = newNode;
prev.next = head;
while (node && node.next) {
var next = node.next.next;
prev.next = node.next;
node.next.next = node;
node.next = next;
prev = node;
node = prev.next;
}
return newNode.next;
};