🤞

206. Reverse Linked Listの解き方について

2024/09/23に公開

問題文


Given the head of a singly linked list, reverse the list, and return the reversed list.

Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]

考え方


prevcurrをそれぞれ宣言し、上記のようなイメージで配置させます。

prev = None
curr = head


currcurr.nextのリンクを切り、currprevを繋ぎます。

prevcurrの位置に持ってきます。

currを次のポイントに持ってきます。
これをcurrが末尾のNULLに到達するまで続けます。

解法

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        prev = None
        curr = head

        while curr is not None:
            next_node = curr.next
            curr.next = prev

            prev = curr
            curr = next_node
        
        return prev

        

計算量

  • 時間計算量
    O(n)
  • 空間計算量
    O(1)

Discussion