Example:
Given1->2->3->4
, you should return the list as2->1->4->3
.
Note:
- Your algorithm should use only constant extra space.
- You may not modify the values in the list's nodes, only nodes itself may be changed.
My solution: 4ms
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
while (head != null && head.next != null) {
ListNode nextHead = head.next.next;
pre.next = head.next;
pre.next.next = head;
head.next = nextHead;
pre = head;
head = nextHead;
}
return dummy.next;
}
Solution from online: 2ms
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
ListNode cur = head;
while (cur != null) {
ListNode node = cur.next;
if (node != null) {
cur.next = node.next;
node.next = cur;
pre.next = node;
}
pre = cur;
cur = cur.next;
}
return dummy.next;
}