# Swap Nodes in Pairs

## Problem

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.

## Code - Java

/**
* Definition for singly-linked list.
* public class ListNode {
*   int val;
*   ListNode next;
*   ListNode(int x) {
*     val = x;
*     next = null;
*   }
* }
*/
public class Solution {
public ListNode swapPairs(ListNode head) {
if (head == null) return null;
ListNode tmp = head.next;
return tmp;
}
}

public class Solution {
/**
* @param head a ListNode
* @return a ListNode
*/
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(0);

ListNode pre = dummy;
ListNode a = pre.next;

while (a != null && a.next != null) {
ListNode b = a.next;
a.next = b.next;
b.next = a;
pre.next = b;
pre = pre.next.next;
a = pre.next;
}

return dummy.next;
}
}

LeetCode 24