Swap nodes in pairs
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given1->2->3->4, You shoshould return the list2->1->4->3.
Your algorithm shocould use only constant space. You mayNotModify the values in the list, only nodes itself can be changed.
The O (1) space is required, and the value of nodes in the list cannot be modified.
In fact, I tried to modify the node value.
Algorithm idea:
Select two nodes each time and maintain the third pointer, which is the precursor of the two nodes to prevent chain breaks. It is easy to swap two nodes. After the swap, it should be linked to the front node.
The Code is as follows:
1 public class Solution { 2 public ListNode swapPairs(ListNode head) { 3 if(head == null || head.next == null) return head; 4 ListNode hhead = new ListNode(0); 5 hhead.next = head; 6 ListNode one = head; 7 ListNode two = one.next; 8 ListNode pre = hhead; 9 while(one !=null && two != null){10 one.next = two.next;11 two.next = one;12 pre.next = two;13 pre = one;14 one = one.next;15 if(one == null) break;16 two = one.next;17 }18 return hhead.next;19 }20 }