単独リンクリストを逆にします。
単独リンクリストを逆にします。
例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
高度:
あなたは、反復逆転または再帰的に一覧表示することができます。次の2つの方法でこの問題を解決することはできますか?
ファローアップ:
リンクリストは、いずれかの繰り返しや再帰的に反転させることができます。あなたは両方を実装してもらえますか?
問題解決のアイデア:
最後のノードへの各トラバースは、時間の複雑さが高すぎる場合にも、このアプローチを取ります。こうした二つの方法、反復と再帰の要件などの高度なトピック:
イテレーション:
各時間サブノードのうちノードプライマリノードとして新しいリストに追加されます。
元のリスト:1-> 2-> 3-> 4-> 5
新しいノードへの最初のノードを分離して、ヘッダリストとして追加される:2-> 3-> 4-> 5:オリジナル1のリスト
ノードとして分離ヘッドノードが新たなリストに追加されている:2-> 1の元のリスト:3-> 4-> 5
ノードが新しいリストに追加される分離ヘッドノード:3-> 2-> 1の元のリスト:> 5 4-
4-> 3-> 2-> 1の元のリスト:5ノードと分離されたヘッドノードが新しいリストに追加されます
ノードが新しいリストに追加される分離ヘッドノード:5-> 4-> 3-> 2-> 1の元のリスト:NULL
Javaの:
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode pre = null;
ListNode tmp = null;
while (head != null) {
tmp = head.next;//tmp暂存当前节点的下一个节点
head.next = pre;//当前节点下一个指向pre
pre = head;//刷新pre
head = tmp;//刷新当前节点为tmp
}
return pre;
}
}
python3:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
pre,tmp=None,None
while(head):
tmp=head.next
head.next=pre
pre=head
head=tmp
return pre
再帰:
これは、実際には再帰関数の完全なスタックです:最終
ベースライン条件は、同じであった再帰関数に渡して、リストの最後のノードのオブジェクトを返す(リストの最後に)空のノードを検出しました。一つのノードと新しいノードによって区切られた1つは、リストの末尾から先頭にリストの末尾に追加されます。そして、反復法同様の原理。
元のリスト:1-> 2-> 3-> 4-> 5
再帰最終層遭遇したノードがnullのテール・ノード5を返します。
新しいリストの分割ノードのテール・ノードとして再発バック層5:5、5ブランク元のノード、元のリスト1-> 2-> 3-> 4-> NULL
新しいリストの分割ノードのテール・ノードとして再発バック層4:5-> 4、ブランキング元ノード4、元のリスト1-> 2-> 3-> NULL
バック新しい別個のテール・ノードリストとして前のノード3に再発:5-> 4-> 3、元のノード3、元のリストをブランキング1-> 2-> NULL
バック新しいリンクされたリストとして分割ノード2の前のノードへの再発:5-> 4-> 3-> 2、元のブランキングノード2、元のリスト1-> NULL
バック新しいリンクされたリストとして分割ノードの前のノードへの再発:5-> 4-> 3-> 2-> 1、元のノードブランキング、元のヌルリスト
Javaの:
class Solution {
public ListNode reverseList(ListNode head) {
//基线条件
if (head == null || head.next == null) return head;
//递归
ListNode tmp = head.next;//暂存头节点的下一个节点
ListNode pre = reverseList(head.next);//递归调用该函数,pre为返回的新链表的头节点,原链表的最后一个节点,无论递归多少层该返回值一直传递不变
tmp.next = head;//暂存的下一个节点指向传入节点
head.next = null;//下一个节点即原本指向tmp的节点 置空
return pre;
}
}
python3:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
tmp = head.next
pre = self.reverseList(head.next)
tmp.next = head
head.next = None
return pre
ブラシ号のタイトルで注目へようこそ:愛のバグを書きます