text: """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."""
  
  
  # Definition for singly-linked list.
  class ListNode:
      def __init__(self, x):
          self.val = x
          self.next = None
  
  
  class Solution:
      def swapPairs(self, head):
          """
          :type head: ListNode
          :rtype: ListNode
          """
          if not head or not head.next:
              return head
  
          prev = head
          curr = prev.next
          while prev and curr:
              v = prev.val
              prev.val = curr.val
              curr.val = v
              prev = curr.next
              if prev:
                  curr = prev.next
          return head
  
  l = ListNode(1)
  l.next = ListNode(2)
  l.next.next = ListNode(3)
  l.next.next.next = ListNode(4)
  
  solution = Solution()
  print(solution.swapPairs(l))