中間のノードを削除しようとしていますが、関数を呼び出して、指定されたノードの後に2番目のノードを保持しようとすると、Noneと表示されます。以下は私のコードです、それを修正するのを助けてください。リンクリストの途中でノードを削除します。ノードへのアクセスのみが指定されています。 - Python
class Node:
# Constructor to initialize the node object
def __init__(self, data):
self.data= data
self.next= None
class LinkedList():
# Function to initialize head
def __init__(self):
self.head = None
# Function to insert a new node at the beginning
def insert(self, data):
node = Node(data)
node.next=self.head
self.head = node
# Function to print elements of the linked list
def printlist(self):
current = self.head
while current:
print current.data
current = current.next
def deleteMiddle(self, node):
second = node.next
print second.data
if node is None:
return
node.data = second.data
node.next = second.next
llist = LinkedList()
llist.insert(10)
llist.insert(15)
mid = Node(20)
llist.insert(mid.data)
llist.insert(16)
llist.insert(17)
llist.insert(19)
print "Before deleting middle or any node"
llist.printlist()
print "After deleting middle or any node"
llist.deleteMiddle(mid)
llist.printlist()
アップデート1:私は変化の下に追加されている、それが正常に動作しています。しかし、それが正しいと(挿入とaddNode関数)1つの関数に結合することができる場合、知りたい。また、このコードを書くより良い方法を理解したいと思います。どこのノードを削除したい場合もあり、そのノードだけにアクセスできるケースがあります。私のコードでは、ノードを定義してそれを削除していますが、自分のコードよりも優れたアプローチが必要だと感じています。
def addNode(self, node):
node.next = self.head
self.head = node
llist.addNode(mid)
私は新しいデータ構造をしていますので、私はUpdate 1の実装とそれが正常に動作しています。 Update 1をチェックし、それが正しい方法であれば教えてください。また、insertとaddNode関数を1つに変更できるかどうかを教えてください。 –
いいですね。現在、ノードの追加機能は、ノードを先頭に配置します。私は、指定されたポイントにリストをトラバースする関数を書くことをお勧めします(リスト内の3番目のノードを見つけることを想像してください)。これを理解すると、リンクされたリストの任意の場所にノードを挿入するコードを記述することができます。 あなたのコードが何をしているかを描くことも検討してください。データ構造をコーディングする際に特に役立つビジュアライゼーションが見つかりました。 – lordluen