Pythonのリンクリストサイクル
リンクリストがあり、サイクルがあるかどうかを確認する必要があるとします。指定されたリンクリストでサイクルを表すために、posと呼ばれる1つの整数ポインターを使用します。この位置は、テールが接続されているリンクリスト内の位置を表します。したがって、posが-1の場合、リンクリストにサイクルは存在しません。たとえば、リンクリストは[5、3、2、0、-4、7]のようで、pos =1です。したがって、サイクルがあり、テールは2番目のノードに接続されます。
これを解決するには、次の手順に従います-
- 1つのセットをハッシュセットHとして取得します
- ヘッドがnullでない場合-
- ヘッドがHにある場合は、trueを返します
- Hに頭を追加
- 頭:=頭の次
- Falseを返す
例
理解を深めるために、次の実装を見てみましょう-
class ListNode: def __init__(self, data, next = None): self.data = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head def get_node(head, pos): if pos != -1: p = 0 ptr = head while p < pos: ptr = ptr.next p += 1 return ptr class Solution(object): def hasCycle(self, head): hashS = set() while head: if head in hashS: return True hashS.add(head) head = head.next return False head = make_list([5,3,2,0,-4,7]) last_node = get_node(head, 5) pos = 1 last_node.next = get_node(head, pos) ob1 = Solution() print(ob1.hasCycle(head))
入力
List = [5,3,2,0,-4,7] Pos = 1
出力
True
-
Pythonでリンクリストのノードを削除する
いくつかの要素を持つリンクリストがあるとします。私たちのタスクは、リストから特定のノードを削除する関数を作成することです。したがって、リストが1→3→5→7→9のようで、3を削除すると、1→5→7→9になります。 削除するノードを指すポインタ「ノード」があるとすると、ノードを削除するにはこれらの操作を実行する必要があります- node.val =node.next.val node.next =node.next.next 例(Python) 理解を深めるために、次の実装を見てみましょう- class ListNode: def __init__(se
-
Pythonの逆リンクリスト
リンクリストがあるとすると、それを逆にする必要があります。したがって、リストが1→3→5→7のような場合、新しい反転リストは7→5→3→1になります。 これを解決するために、このアプローチに従います- (head、back)を解決するために再帰的な方法でリストの反転を実行する1つの手順を定義します 頭がない場合は、頭を戻します temp:=head.next head.next:=back 戻る=頭 温度が空の場合は、ヘッドを戻します head =temp returnsolve(頭、後ろ) 例 理解を深めるために、次の実装を見てみましょう- class ListNode