Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given
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.
Solution1: iterator
Run time complexity is O(n), space complexity is constant space.
/** * 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 || head.next == null) return head; ListNode newHead = new ListNode(0); newHead.next = head; ListNode pre = newHead; ListNode cur = head; while(cur != null && cur.next != null) { ListNode later = cur.next.next; ListNode temp = cur.next; temp.next = cur; pre.next = temp; cur.next = later; pre = cur; cur = later; } return newHead.next; } }Solution2: recursion
/** * 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; else if(head.next == null) return head; ListNode newHead = head.next; ListNode nextPair = head.next.next; head.next.next = head; head.next = swapPairs(nextPair); return newHead; } }
No comments:
Post a Comment