単純なリンクリストからの削除



リンクされたリストからノードを削除するのは簡単ですが、アカウントを作成する必要があります.
  • 1 .リストが空です
  • 2 .削除するノードはリンクリスト内の唯一のノードです
  • 3 .ヘッドノードを削除します
  • 4 . tailノードを削除する
  • 5 .削除するノードは、ヘッドとテールノードの間のどこかにあります
  • 6 .削除する項目はリンクリストには存在しません.

  • ステップ1 :リストが空の場合、メッセージとリターンを出力します.
    def delete(self, key):
        # If the list is empty
        if self.head is None:
            print('Deletion Error: The list is empty.')
            return 
    

    ステップ2:ヘッドがキーを保持している場合は、ヘッドの次のノードに頭を割り当てて頭を削除します.
        # If the key is in head
        if self.head.data == key:
            self.head = self.head.next
            return
    

    手順3 :リンクリスト内の最初のキーの出現を見つけます.
        # Find position of first occurrence of the key
        current = self.head
        while current:
            if current.data == key:
                break
            previous = current
            current = current.next
    

    キーが見つかった場合、前のノードをキーの次のノードにポイントします.エラーメッセージを出力します.
        # If the key was not found
        if current is None:
            print('Deletion Error: Key not found.') 
        else:
            previous.next = current.next
    

    手順4:コードのサンプルテストケースをチェックします.


    完全なコードは以下の通りです.
    class Node:
        def __init__(self, data):
            self.data = data 
            self.next = None
    
    class LinkedList:
        def __init__(self):
            self.head = None
    
        def printList(self):
            temp = self.head
            if not temp:
                print('List is empty.')
                return
            else:
                print('Start:', end=' ')
            while temp:
                print(temp.data, end=' -> ')
                temp = temp.next
            print('end.')
    
        def insert(self, data):
            new_node = Node(data)
    
            # If the linked list is empty
            if self.head is None:
                self.head = new_node
    
            # If the data is smaller than the head
            elif self.head.data >= new_node.data:
                new_node.next = self.head
                self.head = new_node
    
            else:
                # Locate the node before the insertion point
                current = self.head
                while current.next and new_node.data > current.next.data:
                    current = current.next
    
                # Insertion
                new_node.next = current.next
                current.next = new_node
    
        def delete(self, key):
            # If the list is empty
            if self.head is None:
                print('Deletion Error: The list is empty.')
                return 
    
            # If the key is in head
            if self.head.data == key:
                self.head = self.head.next
                return
    
            # Find position of first occurrence of the key
            current = self.head
            while current:
                if current.data == key:
                    break
                previous = current
                current = current.next
    
            # If the key was not found
            if current is None:
                print('Deletion Error: Key not found.') 
            else:
                previous.next = current.next
    
    
    
    if __name__=='__main__':
        # Create an object
        LL = LinkedList()
        print('')
    
        # Insert some nodes
        LL.insert(10)
        LL.insert(12)
        LL.insert(8)
        LL.insert(11)
        LL.insert(10)
    
    
        LL.printList()
        LL.delete(7)
        LL.delete(8)
        LL.delete(13)
        LL.printList() 
    
    

    その記事を読んでくれてありがとう.あなたのフィードバックを残してください.😄
    参考文献
  • https://www.geeksforgeeks.org/linked-list-set-3-deleting-node/
  • アルゴリズム入門[書籍]