实现双向链表时遇到的问题

3
我正在制作双向链表类。
def remove(self, item):
    current=self.__head
    prev=None
    found=False
    if(self.__size>=1):
        for i in range (0,self.__size):
            if(current.getData()==item):
                found=True
                pos=i#save the position to pop
                i=self.__size#leave the loop
            else:
                prev=current
                current=current.getNext()

        if(found==True):#excute only if the item is found
            if(prev==None):#first item found
                if(self.__size==1):
                    self.__head==None
                    self.__tail==None
                    current.setNext(None)
                    current.setPrevious(None)
                else:#size bigger than 2
                    self.__head==current.getNext()
                    current.setNext(None)
            else:
                if(current.getNext()==None):#last item found
                    self.__tail==prev
                    current.setPrevious(None)
                    prev.setNext(None)
                else:
                    Next=current.getNext()
                    current.setNext(None)
                    current.setPrevious(None)
                    Next.setPrevious(prev)
                    prev.setNext(Next)
            self.pop(pos)
            self.__size-=1

这是我迄今为止所做的。如果我运行以下代码
 for i in range(0, 10):
    int_list2.add(i)
    int_list2.remove(1)
    int_list2.remove(3)
    int_list2.remove(2)
    int_list2.remove(0)
    print(int_list2)

这是我得到的输出结果

0

1

2

3

4 3

5 4 3

6 5 4 3

7 6 5 4 3

8 7 6 5 4 3

9 8 7 6 5 4 

我期望前四行(0~3)不显示任何内容,从第五行开始显示4,第六行显示5 4 ... 以此类推。

最后,我想要的结果是 9 8 7 6 5 4

请问如何修正代码?

1个回答

2

问题的一部分在循环中if语句的第一部分:

for i in range (0,self.__size):
        if(current.getData()==item):
            found=True
            pos=i#save the position to pop
            i=self.__size#<--- doesn't leave the loop 
        else:
            prev=current
            current=current.getNext()

i=self.__size更改为使用break来退出循环。

这样做是为了当你找到要删除的项时,你不会继续迭代循环,current也不是你想要删除的项。相反,current是你在for循环中查看的最后一个节点的值。

另外,在以下这些行中,你使用了==,但我确定你的意思是赋值=

self.__head==None   #should be self.__head=None
self.__tail==None   #should be self.__tail=None
current.setNext(None)
current.setPrevious(None)

将“==”更改为单个“=”。我认为在if(found == True):块中您会多次这样做。这些行只是评估布尔表达式并丢弃值。

更改这些内容,让我知道是否解决了问题。

还有一个小提示:

如果您有一个布尔变量(如found),则不需要检查found == True,因为它与found的值相同。

if(found==True):
   ...

等同于:

if(found):
   ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接