【Leetcodeブラシ問題まとめ】(一)チェーンテーブル逆順
1620 ワード
タイトル:
先頭のチェーンテーブルを指定し、逆シーケンスで出力します.
例:
入力:head->1->2->3->4->None
出力:head->4->3->2->1->None
方法一:その場で逆序
【注意】:1チェーンテーブルの使用は、headノードを与えるだけでチェーンテーブル全体を連結することができます.
2チェーンテーブルの最初のノードはヘッダノードです.ヘッダノードのデータドメインが空です.チェーンテーブルのヘッダノードとは、ヘッダノードを除く最初のノードを指す.
3チェーンテーブルの末尾ノードは最後のノードであり、チェーンテーブルの末尾ノードのポインタドメインは空である.(nail.next=None)
分析:
3つのポインタ,pre,cur,nextはそれぞれ前置,現在,後置ポインタを表し,その後絶えず後方にスライドし,現在のノードの本来の後置ノードを指すポインタが前置ノードを指すようにする.このようにするにはいくつかの注意点があります.
まず、現在のノードのポインタを動かす前に、必ず現在のノードのポインタをメモしてnext=cur.nextを保存します.そうしないと、現在のノードcurのポインタを動かすと、後置ノードnextが見つかりません.
次に、チェーンテーブルのヘッダノードは特殊な処理が必要です.preノードがないので、ループが走れません.手動で接続し、ポインタドメインを空にしてテールノードとします.
最後に、curが最後のノードである場合、後置ノードがないため、前のノードpreを手動で指さす必要があるため、特殊な処理も必要である.
最後の最後に、チェーン時計のヘッドノードhead.最後のノードを指すと完了します.
キーコード:
パフォーマンス分析:
時間複雑度O(n)遍歴一次チェーンテーブル
空間複雑度O(1)
方法2:挿入法
そうにゅうほう
先頭のチェーンテーブルを指定し、逆シーケンスで出力します.
例:
入力:head->1->2->3->4->None
出力:head->4->3->2->1->None
方法一:その場で逆序
【注意】:1チェーンテーブルの使用は、headノードを与えるだけでチェーンテーブル全体を連結することができます.
2チェーンテーブルの最初のノードはヘッダノードです.ヘッダノードのデータドメインが空です.チェーンテーブルのヘッダノードとは、ヘッダノードを除く最初のノードを指す.
3チェーンテーブルの末尾ノードは最後のノードであり、チェーンテーブルの末尾ノードのポインタドメインは空である.(nail.next=None)
分析:
3つのポインタ,pre,cur,nextはそれぞれ前置,現在,後置ポインタを表し,その後絶えず後方にスライドし,現在のノードの本来の後置ノードを指すポインタが前置ノードを指すようにする.このようにするにはいくつかの注意点があります.
まず、現在のノードのポインタを動かす前に、必ず現在のノードのポインタをメモしてnext=cur.nextを保存します.そうしないと、現在のノードcurのポインタを動かすと、後置ノードnextが見つかりません.
次に、チェーンテーブルのヘッダノードは特殊な処理が必要です.preノードがないので、ループが走れません.手動で接続し、ポインタドメインを空にしてテールノードとします.
最後に、curが最後のノードである場合、後置ノードがないため、前のノードpreを手動で指さす必要があるため、特殊な処理も必要である.
最後の最後に、チェーン時計のヘッドノードhead.最後のノードを指すと完了します.
キーコード:
def Reverse(head):
if head ==None or head.next == None: # ( , )
return 0
pre = None #
cur = None
next = None
cur = head.next #
next = cur.next # cur
cur.next = None #
pre = cur #
cur = next
while(cur.next != None):
next = cur.next # cur
cur.next = pre # cur pre
pre = cur #
cur = next
cur.next = pre # ( pre)
head.next = cur #
パフォーマンス分析:
時間複雑度O(n)遍歴一次チェーンテーブル
空間複雑度O(1)
方法2:挿入法
そうにゅうほう