【Leetcode】206。逆リンクリスト

No206。逆リンクリスト

トピック

単一リンクリストを逆にします。

  • 入力:1-> 2-> 3-> 4-> 5-> NULL
  • 出力:5-> 4-> 3-> 2-> 1-> NULL

高度な

リンクリストを繰り返しまたは再帰的に逆にすることができます。この問題を2つの方法で解決できますか?

アイデア1

  1. 最初のトラバーサル、データを保存します。
  2. 2番目のトラバース、データを変更します。

問題解決コード(Python3)

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        result = []

        p = head
        while p:
            result.append(p.val)
            p = p.next
        
        p = head
        i = 0
        while p:
            p.val = result[-1-i]
            i += 1
            p = p.next

        return head

複雑さの分析:

  • 時間計算量O(n)
  • スペースの複雑さO(n)には、要素を格納するための追加のスペースが必要です

運転結果

ここに画像の説明を挿入します

アイデア2

繰り返し、クラスの双方向リストを作成して、目標を達成するためにポインターの方向を変更します。

  1. pNextを使用して、現在のノードの次のノードを保存します
  2. head.nextをprevに、prevをheadに、headをpNextに変更します

問題解決コード(Python3)

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        prev = None
        while head:
            pNext = head.next
            head.next,prev,head = prev,head,pNext
        return prev

複雑さの分析

  • 時間計算量O(n)
  • スペースの複雑さO(1)

運転結果

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/Xiao_Spring/article/details/113760300
おすすめ