我正在尝试学习使用python的链接列表,
请有人指导我如何从链接列表中删除一个特定的给定节点。
#!/usr/bin/python
class Node(object):
def __init__(self, data=None, next=None):
self.data = data
self.next = next
def __str__(self):
return str(self.data)
def print_list(node):
while node:
print node,
node = node.next
print
def delete_node(node, node_to_remove):
if first_node == None:
return
pass
# way of creating linked list
def create_linked_list1(n):
linked_list = Node(1)
head = linked_list
for i in range(1, n):
head.next = Node(i)
head = head.next
return linked_list
node1 = create_linked_list1(10)
print_list(node1)发布于 2013-12-03 04:59:41
显而易见的解决办法是:
def delete_by_index(node, index):
for _ in range(index):
prev_node, node = node, node.next
prev_node.next = node.next但是,这将无法删除第一个节点。为了做到这一点,您需要让它返回新的列表头,这个列表头通常是旧的列表头,但是在删除头的情况下,它将是旧的第二个节点。所以:
def delete_by_index(node, index):
if not index:
return node.next
head = node
for _ in range(index):
prev_node, node = node, node.next
prev_node.next = node.next
return head如何简化这一点应该是显而易见的,您应该这样做。
另一种选择是剔除“搜索”和“删除”部分。编写一个nth函数(这应该很简单),然后您可以这样做:
def delete_by_index(node, index):
if not index:
return node.next
prev_node = nth(node, index-1)
prev_node.next = prev_node.next.next
return node如果您了解递归函数,您可能还想知道如何递归编写delete_by_index或nth (这是最容易编写的递归函数之一)。
您还可能想要捕获错误,例如删除10节点列表的第15节点,并使其更好。找出在这种情况下会出现什么错误(或者,如果您找不出,只需运行它并查看),然后try/except,然后引发一个IndexError。
在进行此操作时,您可能需要添加一个delete_by_data(node, data)函数,或者一个delete_by_identity(node, child_node),以供进一步练习。
发布于 2015-04-15 13:17:02
v-> w-> x -> y> z,如果我们想删除x,那么新的链表是v-> w-> y-> z,并且我们只能访问x。
下一个节点到x的位置,即节点Y的位置
next_node = x.next
将Y交换为X,然后删除Y `x.data = next_node.data
x.next = next_data.next
发布于 2016-06-25 19:01:45
在单链接列表中使用python删除节点。
def删除(self,data):
if self.head.data==data:
temp=self.head.next
del self.head
self.head=temp
else:
p=self.head
while p.next.data!=data:
p=p.next
temp=p.next.next
del p.next
p.next=temphttps://stackoverflow.com/questions/20343111
复制相似问题