Swap Nodes in Pairs (reverse Linked List in Pairs)
update Jan 17,2018 1:15
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.
Basic Idea:
利用递归的思路可以比较轻易的完成,如下图所示:
input:
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> ... -> null
将第三个node及其之后看做子问题:
|----------------------------|
1-> 2 -> | 3 -> 4 -> 5 -> ... -> null |
|----------------------------|
但是这种写法会消耗O(n)
space,因为 call stack 的问题,执行顺序最先被reverse的其实是最右端的两个,然后逐层返回。
Java Code:
class Solution {
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) return head;
ListNode nextHead = head.next.next;
ListNode newHead = head.next;
newHead.next = head;
head.next = swapPairs(nextHead);
return newHead;
}
}