Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given1-> 2-> 3-> 4, you should return the list as2-> 1-> 4-> 3.
Your algorithm shocould use only constant space. You mayNotModify the values in the list, only nodes itself can be changed.
Https://oj.leetcode.com/problems/swap-nodes-in-pairs/
Train of Thought: Simulate the question and perform the operation carefully.
- Added dummyhead to facilitate processing;
- The operation node must retain the pointer of the previous node.
Code:
public class Solution { public ListNode swapPairs(ListNode head) { if (head == null) return null; ListNode dummyHead = new ListNode(-1); dummyHead.next = head; ListNode pre = dummyHead; while (pre != null && pre.next != null && pre.next.next != null) { ListNode q = pre.next; ListNode r = q.next; pre.next = r; q.next = r.next; r.next = q; pre = pre.next.next; } return dummyHead.next; } public static void main(String[] args) { ListNode list = ListUtils.makeList(1, 2, 3, 4, 5); ListUtils.printList(list); ListUtils.printList(new Solution().swapPairs(list)); }}