1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public ListNode swapPairs(ListNode head) { if (head == null || head.next == null) return head; ListNode dummy = new ListNode(0); dummy.next = head; ListNode prev = null, nodeOne = dummy, nodeTwo = null; while (nodeOne.next != null && nodeOne.next.next != null) { prev = nodeOne; nodeOne = prev.next; nodeTwo = prev.next.next; nodeOne.next = nodeTwo.next; nodeTwo.next = nodeOne; prev.next = nodeTwo; } return dummy.next; } }
|
就是考虑swap一对儿的时候, 需要该对儿前面一个node以及后面一个node(或者是null).
时间复杂度: O(n)
空间复杂度: O(1)
1 2 3 4 5 6 7 8 9 10
| class Solution { public ListNode swapPairs(ListNode head) { if (head == null || head.next == null) return head; ListNode temp = head.next; head.next = swapPairs(temp.next); temp.next = head; return temp; } }
|
递归解法, 也很好理解.