Description
https://leetcode.com/problems/swap-nodes-in-pairs/
Given a linked list, swap every two adjacent nodes and return its head.
Example 1:
Input: head = [1,2,3,4] Output: [2,1,4,3]
Example 2:
Input: head = [] Output: []
Example 3:
Input: head = [1] Output: [1]
Constraints:
- The number of nodes in the list is in the range
[0, 100]
. 0 <= Node.val <= 100
Follow up: Can you solve the problem without modifying the values in the list’s nodes? (i.e., Only nodes themselves may be changed.)
Explanation
We can resolve the problem with a recursive approach.
Python Solution
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
return self.helper(head)
def helper(self, head):
if not head:
return head
if not head.next:
return head
dummy = ListNode(0)
dummy.next = head
third = head.next.next
dummy.next = head.next
head.next.next = head
head.next = self.helper(third)
return dummy.next
- Time Complexity: O(N)
- Space Complexity: O(N)
It is a best solution I found that very popular and helpful:
https://www.youtube.com/watch?v=4e7GMZwmNLg&ab_channel=EricProgramming