No206。逆リンクリスト
トピック
単一リンクリストを逆にします。
例
- 入力:1-> 2-> 3-> 4-> 5-> NULL
- 出力:5-> 4-> 3-> 2-> 1-> NULL
高度な
リンクリストを繰り返しまたは再帰的に逆にすることができます。この問題を2つの方法で解決できますか?
アイデア1
- 最初のトラバーサル、データを保存します。
- 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
繰り返し、クラスの双方向リストを作成して、目標を達成するためにポインターの方向を変更します。
- pNextを使用して、現在のノードの次のノードを保存します
- 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)