Swap Nodes in Pairs
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.
Solution1:
public ListNode swapPairs(ListNode node) {
if (node == null || node.next == null) {
return node;
}
ListNode head = node.next;
node.next = head.next;
head.next = node;
fullSwapPairs(node);
return head;
}
public void fullSwapPairs(ListNode node1) {
ListNode node2, node3;
if ((node2 = node1.next) == null) {
return;
}
if ((node3 = node2.next) == null) {
return;
}
node1.next = node3;
node2.next = node3.next;
node3.next = node2;
fullSwapPairs(node2);
}
Solution2:
public ListNode swapPairs1(ListNode node) {
if (node == null || node.next == null) {
return node;
}
ListNode head = node.next;
node.next = swapPairs(head.next);
head.next = node;
return head;
}