描述
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.
分析
给定一个链表,交换每两个相邻节点并返回其头。
例如,给定1 ->2 ->3>4,您应该返回列表为2 ->1>4>3。
代码
1 public static ListNode swapPairs(ListNode head) { 2 if (head == null || head.next == null) 3 return null; 4 ListNode fakehead = new ListNode(-1); 5 fakehead.next = head; 6 ListNode ptr1 = fakehead.next, ptr2 = fakehead.next.next, newstart = fakehead; 7 8 while (ptr2 != null && ptr2.next != null) { 9 ptr1.next = ptr2.next; 10 ptr2.next = newstart.next; 11 newstart.next = ptr2; 12 ptr2.next = ptr1; 13 newstart = newstart.next.next; 14 ptr1 = newstart.next; 15 ptr2 = newstart.next.next; // 最后一轮执行不到,因为判空了 16 17 } 18 if (ptr2.next == null) { // 如果是偶数,则再交换一次。 如果是奇数就不交换了。 19 ptr1.next = ptr2.next; 20 ptr2.next = newstart.next; 21 newstart.next = ptr2; 22 ptr2.next = ptr1; 23 } 24 return fakehead.next; 25 }