24. Swap Nodes in Pairs

LONGNEW·2023년 7월 17일
0

CP

목록 보기
125/155

https://leetcode.com/problems/swap-nodes-in-pairs/?envType=featured-list&envId=top-google-questions

input :

  • head

output :

  • 모든 인접한 1개의 노드끼리 값이 swap된 형태의 싱글 링크드 리스트의 head를 반환하시오.

조건 :


Solution explain : Solution1

idea

  • 이전 링크드 리스트를 제작하듯 값들을 모두 데이터에 저장하여 사용하자.
  • 반복문을 통해 모든 값들을 swap해준다.
  • idx를 통해 변경된 원소 값으로 각 노드의 val를 업데이트하자.

주의

  • 포인터를 이용하는 것도 좋은 방법 중에 하나이다.
  • 일반화를 위해 해야하는 과정이 3개의 노드를 계속해서 변수로 유지해야 할 것 같은데
  • 양방향 리스트가 아니기에 해당 과정이 좀 복잡하다.
from typing import Optional, List
# 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: Optional[ListNode]) -> Optional[ListNode]:
        data = []

        temp = head
        while temp:
            data.append(temp.val)
            temp = temp.next

        for i in range(1, len(data), 2):
            data[i - 1], data[i] = data[i], data[i - 1]

        temp, idx = head, 0
        while temp:
            temp.val = data[idx]
            temp, idx = temp.next, idx + 1
        return head

node7 = ListNode(6, None)
node6 = ListNode(4, node7)
node5 = ListNode(3, node6)
node4 = ListNode(1, node5)
s = Solution()
ret = s.swapPairs(node4)
while ret:
    print(ret.val, end=" ")
    ret = ret.next

0개의 댓글