LinkedList - NameError: name 'target' is not defined
LinkedList - NameError: name 'target' is not defined
我正在学习 LinkedList。我运行这一次。但是当我再次尝试 运行 这段代码时,它没有成功。我想知道为什么。当我尝试调用方法“删除”时出现错误
首先,创建了一个 class 链表。然后我们向这个 class 添加新方法。方法“addFirst”用于在链表的开头插入元素。另一方面,“addLast”方法用于在链表的末尾插入元素。 “addAfter”用于在目标节点之后插入元素。类似于“addBefore”方法,而“remove”方法用于删除链表中的节点。
class LinkedList:
def __init__(self):
self.head = None
def __repr__(self):
node = self.head
nodes = []
while node is not None:
nodes.append(node.data)
node = node.next
nodes.append("None")
return " -> ".join(nodes)
def __iter__(self):
node = self.head
while node is not None:
yield node
node = node.next
def add_first(self, node):
node.next = self.head
self.head = node
def add_last(self, node):
if self.head is None:
self.head = node
return
for current_node in self:
pass
current_node.next = node
def add_after(self, target_node_data, new_node):
if self.head is None:
raise Exception("List is empty")
for node in self:
if node.data == target_node_data:
new_node.next = node.next
node.next = new_node
return
raise Exception("Target not found")
def add_before(self, target_node_data, new_node):
if self.head is None:
raise Exception("List is empty")
if self.head.data == target_node_data:
return self.add_first(new_node)
prev_node = self.head
for node in self:
if node.data == target_node_data:
prev_node.next = new_node
new_node.next = node
return
prev_node = node
raise Exception("Target Node not found")
def remove_node(self, target_node_data):
if self.head is None:
raise Exception("List is empty")
if self.head.data == target_node_data:
self.head = self.head.next
return
previous_node = self.head
for node in self:
if node.data == target.node.data:
previous_node.next = node.next
node.next = None
return
previous_node = node
raise Exception("Target Node not found")
class Node:
def __init__(self, data):
self.data = data
self.next = None
def __repr__(self):
return self.data
llist = LinkedList()
first_node = Node("a")
llist.head = first_node
second_node = Node("b")
third_node = Node("c")
first_node.next = second_node
second_node.next = third_node
for node in llist:
print(node)
llist.add_first(Node("b2"))
llist
llist.add_last(Node("b"))
llist
llist.add_after("a", Node("b"))
llist
llist.remove_node("a")
应该是target_node_data
而不是target.node.data
:
class LinkedList:
def __init__(self):
self.head = None
def __repr__(self):
node = self.head
nodes = []
while node is not None:
nodes.append(node.data)
node = node.next
nodes.append("None")
return " -> ".join(nodes)
def __iter__(self):
node = self.head
while node is not None:
yield node
node = node.next
def add_first(self, node):
node.next = self.head
self.head = node
def add_last(self, node):
if self.head is None:
self.head = node
return
for current_node in self:
pass
current_node.next = node
def add_after(self, target_node_data, new_node):
if self.head is None:
raise Exception("List is empty")
for node in self:
if node.data == target_node_data:
new_node.next = node.next
node.next = new_node
return
raise Exception("Target not found")
def add_before(self, target_node_data, new_node):
if self.head is None:
raise Exception("List is empty")
if self.head.data == target_node_data:
return self.add_first(new_node)
prev_node = self.head
for node in self:
if node.data == target_node_data:
prev_node.next = new_node
new_node.next = node
return
prev_node = node
raise Exception("Target Node not found")
def remove_node(self, target_node_data):
if self.head is None:
raise Exception("List is empty")
if self.head.data == target_node_data:
self.head = self.head.next
return
previous_node = self.head
for node in self:
if node.data == target_node_data:
previous_node.next = node.next
node.next = None
return
previous_node = node
raise Exception("Target Node not found")
class Node:
def __init__(self, data):
self.data = data
self.next = None
def __repr__(self):
return self.data
llist = LinkedList()
first_node = Node("a")
llist.head = first_node
second_node = Node("b")
third_node = Node("c")
first_node.next = second_node
second_node.next = third_node
for node in llist:
print(node)
llist.add_first(Node("b2"))
llist
llist.add_last(Node("b"))
llist
llist.add_after("a", Node("b"))
llist
llist.remove_node("a")
我正在学习 LinkedList。我运行这一次。但是当我再次尝试 运行 这段代码时,它没有成功。我想知道为什么。当我尝试调用方法“删除”时出现错误 首先,创建了一个 class 链表。然后我们向这个 class 添加新方法。方法“addFirst”用于在链表的开头插入元素。另一方面,“addLast”方法用于在链表的末尾插入元素。 “addAfter”用于在目标节点之后插入元素。类似于“addBefore”方法,而“remove”方法用于删除链表中的节点。
class LinkedList:
def __init__(self):
self.head = None
def __repr__(self):
node = self.head
nodes = []
while node is not None:
nodes.append(node.data)
node = node.next
nodes.append("None")
return " -> ".join(nodes)
def __iter__(self):
node = self.head
while node is not None:
yield node
node = node.next
def add_first(self, node):
node.next = self.head
self.head = node
def add_last(self, node):
if self.head is None:
self.head = node
return
for current_node in self:
pass
current_node.next = node
def add_after(self, target_node_data, new_node):
if self.head is None:
raise Exception("List is empty")
for node in self:
if node.data == target_node_data:
new_node.next = node.next
node.next = new_node
return
raise Exception("Target not found")
def add_before(self, target_node_data, new_node):
if self.head is None:
raise Exception("List is empty")
if self.head.data == target_node_data:
return self.add_first(new_node)
prev_node = self.head
for node in self:
if node.data == target_node_data:
prev_node.next = new_node
new_node.next = node
return
prev_node = node
raise Exception("Target Node not found")
def remove_node(self, target_node_data):
if self.head is None:
raise Exception("List is empty")
if self.head.data == target_node_data:
self.head = self.head.next
return
previous_node = self.head
for node in self:
if node.data == target.node.data:
previous_node.next = node.next
node.next = None
return
previous_node = node
raise Exception("Target Node not found")
class Node:
def __init__(self, data):
self.data = data
self.next = None
def __repr__(self):
return self.data
llist = LinkedList()
first_node = Node("a")
llist.head = first_node
second_node = Node("b")
third_node = Node("c")
first_node.next = second_node
second_node.next = third_node
for node in llist:
print(node)
llist.add_first(Node("b2"))
llist
llist.add_last(Node("b"))
llist
llist.add_after("a", Node("b"))
llist
llist.remove_node("a")
应该是target_node_data
而不是target.node.data
:
class LinkedList:
def __init__(self):
self.head = None
def __repr__(self):
node = self.head
nodes = []
while node is not None:
nodes.append(node.data)
node = node.next
nodes.append("None")
return " -> ".join(nodes)
def __iter__(self):
node = self.head
while node is not None:
yield node
node = node.next
def add_first(self, node):
node.next = self.head
self.head = node
def add_last(self, node):
if self.head is None:
self.head = node
return
for current_node in self:
pass
current_node.next = node
def add_after(self, target_node_data, new_node):
if self.head is None:
raise Exception("List is empty")
for node in self:
if node.data == target_node_data:
new_node.next = node.next
node.next = new_node
return
raise Exception("Target not found")
def add_before(self, target_node_data, new_node):
if self.head is None:
raise Exception("List is empty")
if self.head.data == target_node_data:
return self.add_first(new_node)
prev_node = self.head
for node in self:
if node.data == target_node_data:
prev_node.next = new_node
new_node.next = node
return
prev_node = node
raise Exception("Target Node not found")
def remove_node(self, target_node_data):
if self.head is None:
raise Exception("List is empty")
if self.head.data == target_node_data:
self.head = self.head.next
return
previous_node = self.head
for node in self:
if node.data == target_node_data:
previous_node.next = node.next
node.next = None
return
previous_node = node
raise Exception("Target Node not found")
class Node:
def __init__(self, data):
self.data = data
self.next = None
def __repr__(self):
return self.data
llist = LinkedList()
first_node = Node("a")
llist.head = first_node
second_node = Node("b")
third_node = Node("c")
first_node.next = second_node
second_node.next = third_node
for node in llist:
print(node)
llist.add_first(Node("b2"))
llist
llist.add_last(Node("b"))
llist
llist.add_after("a", Node("b"))
llist
llist.remove_node("a")