Leetcode Python - 24. Swap Nodes in Pairs
Leetcode #24 - Swap Nodes in Pairs
리트코드의 24번 문제 ‘Swap Nodes in Pairs’을 파이썬으로 풀어 보도록 하겠습니다.
이 문제는 linked list를 받아서 2쌍씩 앞뒤를 바꾸는 문제입니다.
예전에 풀었던 linked list문제를 참고 해서 풀었습니다. 궁금하다면 이 링크를 봐보세요.
먼저, 비어있거나 node가 1 개인 경우 head를 리턴해줍니다.
if head == None or head.next == None:
return head
그러고 나서, fast와 slow를 포인터로 head에 선언해주고, fast와 slow의 값을 바꿔주면서 끝까지 loop를 해줍니다.
fast = slow = head
fast = fast.next
v = 0
while fast:
v = slow.val
slow.val = fast.val
fast.val = v
if fast.next == None:
break
fast = fast.next.next
slow = slow.next.next
전체 코드는 아래와 같습니다.
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if head == None or head.next == None:
return head
fast = slow = head
fast = fast.next
v = 0
while fast:
v = slow.val
slow.val = fast.val
fast.val = v
if fast.next == None:
break
fast = fast.next.next
slow = slow.next.next
return head
시간복잡도는 O(n) : linked list를 한 바퀴 loop, 공간복잡도는 O(n) : loop하면서 fast, slow, v를 저장
개선 해보기
discuss에 가서 다른 풀이를 보도록 하겠습니다.
먼저, dummy node 하나와 pre node를 두고, pre를 head 앞으로 둡니다.
dummy = pre = ListNode(0)
pre.next = head
a를 앞의 노드, b를 뒤의 노드로 서로 바꾸어줍니다. 그리고 dummy.next를 리턴해 주면 끝!입니다.
while pre.next and pre.next.next:
a = pre.next
b = a.next
pre.next, a.next, b.next = b, b.next, a
pre = a
return dummy.next
전체코드는
class Solution:
def swapPairs(self, head):
dummy = pre = ListNode(0)
pre.next = head
while pre.next and pre.next.next:
a = pre.next
b = a.next
pre.next, a.next, b.next = b, b.next, a.next
pre = a
return dummy.next
시간복잡도는 O(n) : loop 한번이므로, 공간복잡도는 O(n) : loop 돌면서 a,b,pre를 할당