Given a linked list, swap every two adjacent nodes and return its head.
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.
input:
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> ... -> null
将第三个node及其之后看做子问题:
|----------------------------|
1-> 2 -> | 3 -> 4 -> 5 -> ... -> null |
|----------------------------|
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;
}
}