首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python从链接列表中删除给定节点

如何使用Python从链接列表中删除给定节点
EN

Stack Overflow用户
提问于 2013-12-03 04:50:03
回答 4查看 10.5K关注 0票数 3

我正在尝试学习使用python的链接列表,

请有人指导我如何从链接列表中删除一个特定的给定节点。

代码语言:javascript
运行
复制
#!/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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-03 04:59:41

显而易见的解决办法是:

代码语言:javascript
运行
复制
def delete_by_index(node, index):
    for _ in range(index):
        prev_node, node = node, node.next
    prev_node.next = node.next

但是,这将无法删除第一个节点。为了做到这一点,您需要让它返回新的列表头,这个列表头通常是旧的列表头,但是在删除头的情况下,它将是旧的第二个节点。所以:

代码语言:javascript
运行
复制
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函数(这应该很简单),然后您可以这样做:

代码语言:javascript
运行
复制
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_indexnth (这是最容易编写的递归函数之一)。

您还可能想要捕获错误,例如删除10节点列表的第15节点,并使其更好。找出在这种情况下会出现什么错误(或者,如果您找不出,只需运行它并查看),然后try/except,然后引发一个IndexError

在进行此操作时,您可能需要添加一个delete_by_data(node, data)函数,或者一个delete_by_identity(node, child_node),以供进一步练习。

票数 3
EN

Stack Overflow用户

发布于 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

票数 0
EN

Stack Overflow用户

发布于 2016-06-25 19:01:45

在单链接列表中使用python删除节点。

def删除(self,data):

代码语言:javascript
运行
复制
    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=temp
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20343111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档