猿问

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

我目前正在学习 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"


翻过高山走不出你
浏览 157回答 1
1回答

呼唤远方

始终引用节点的目的head是避免像remove. prev并且cur可以初始化为头部,设置为循环顶部的cur节点。在循环底部更新。prevprevdef 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:    ...另外,我鼓励您不要返回特殊字符串来指示成功或失败。其他一些选项:True如果项目被移除则返回,False否则返回被删除的节点,None否则总是返回None始终返回None,但如果未找到要删除的项目,则引发异常。
随时随地看视频慕课网APP

相关分类

Python
我要回答