为了账号安全,请及时绑定邮箱和手机立即绑定

需要帮助为我的链表类实现 remove() 方法

需要帮助为我的链表类实现 remove() 方法

翻过高山走不出你 2023-06-20 10:27:10
我目前正在学习 Python 中的数据结构,我正在尝试创建一个链表。我得到了appendandget_size和display方法,但是当我尝试创建一个remove方法时。它删除了特定元素,但是当我尝试再次使用该方法打印所有元素时display,它打印的是一个空列表。class Node:    def __init__(self, data=None):        self.data = data        self.ref = None        class Linked:    def __init__(self):        self.head = Node()         self.size = 0     def append(self, data):         new = Node(data)           cur = self.head         while cur.ref != None:            cur = cur.ref        cur.ref = new        self.size += 1        def get_size(self):        return self.size    def display(self):         el = []        cur_node = self.head        while cur_node.ref !=None:             cur_node = cur_node.ref            el.append(cur_node.data)        return el        def remove(self, data):        this_node = self.head        prv_node = None        while this_node != None:            if data == this_node.data:                if prv_node:                    prv_node.ref = this_node.ref                else:                    self.head = this_node.ref                                    self.size -= 1                return F"The item is removed "            else:                prev_node = this_node                this_node = this_node.ref        return F"data not found"
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

始终引用节点的目的head是避免像remove. prev并且cur可以初始化为头部,设置为循环顶部的cur节点。在循环底部更新。prevprev


def remove(self, data):

    previous = self.head

    while prev.ref is not None:

        cur = prev.ref

        if cur.data == data:

            prev.ref = cur.ref  # Cut out cur

            self.size -= 1

            return "The item is removed"

        prev = cur

    return "data not found"

在 Python 3.8 中,您可以使用运算符将赋值移动cur到循环条件中:=:


while (cur := prev.ref) is not None:

    if cur.data == data:

    ...

另外,我鼓励您不要返回特殊字符串来指示成功或失败。其他一些选项:

  1. True如果项目被移除则返回,False否则

  2. 返回被删除的节点,None否则

  3. 总是返回None

  4. 始终返回None,但如果未找到要删除的项目,则引发异常。


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信