双向非循环链表的长度

有没有同志帮忙看看这段代码的错误啊,一直停不下来只能stop的那种
双向非循环链表的长度(数据结构)
from DuNode import DuNode
class Do_nonCycLinkList:
    def __init__(self):
        self._head = DuNode(None)
        self._head.next = self._head
        self._head.prior = self._head

    def empty(self):
        return self._head.next is None

    def __len__(self):
        p = self._head
        count = 0
        while p !=None:
            count += 1
            p = p.next
        return count

    def clear(self):
        p = self._head.next
        self._head.next = None
        while p:
            q = p
            p = p.next
            del q

    def insert(self, i, item):
        if i < 0:
            raise IndexError('I is too small')
        previous = self._head
        count =  -1
        while previous and count < i - 1:
            previous = previous.next
            count += 1
        following = previous.next
        if previous is None:
            raise IndexError('i is too big')

        new_node = DuNode(item, previous, following)
        previous.next = new_node
        following.prior = new_node


    def remove(self, i):
        if i < 0:
            raise IndexError("I is too small,no element is in position i")
        previous = self._head
        t = -1
        while previous and t < i - 1:
            previous = previous.next
            t += 1
        if previous is None:
            raise IndexError("I is too big ,no element is in position i")
        current = previous.next
        if current is None:
            raise IndexError("I is too big ,no element is in position i")
        previous.next = current.next
        item = current.enty
        del current
        return item

    def retrieve(self, i):
        if i < 0:
            raise IndexError("I is too small,no element is in position i")
        p = self._head.next
        j = 0
        while p and j < i:
            p = p.next
            j += 1
        if p is None:
            raise IndexError("I is too big ,no element is in position i")
        else:
            return p.enty

    def contains(self, item):
        # """判断表中是否包含元素item"""
        current = self._head.next
        for i in range(self.__len__()):
            if current.entry[i] == item:
                return True
        return False

    def traverse(self):
        # """输出表中所有元素"""
        p = self._head.next
        l = []
        t = 0
        while p:
            t += 1
            l.append(p.entry)
            p = p.next
        # for c in l:
        return l

    def __str__(self):
        current = self._head.next
        element = ''
        t = 0
        while current:
            t += 1
            element += str(current.entry)
            current = current.next
        return element

if __name__ == '__main__':
    l =Do_nonCycLinkList()
    l.insert(0,1)
    l.insert(1,2)
    l.insert(2, 3)
   print(l)
    print(l.contains(4))


```

在代码的最后,print(l.contains(4))缩进错误,导致程序无法执行并卡在该行。应该将该行缩进调整到与上一行一致。

此外,在remove方法中,item的属性应为entry而不是enty。

以下是修改后的代码:


from DuNode import DuNode

class Do_nonCycLinkList:
    def __init__(self):
        self._head = DuNode(None)
        self._head.next = self._head
        self._head.prior = self._head
        
    def empty(self):
        return self._head.next is None
    
    def __len__(self):
        p = self._head.next
        count = 0
        while p != self._head:
            count += 1
            p = p.next
        return count
    
    def clear(self):
        p = self._head.next
        self._head.next = self._head
        while p != self._head:
            q = p
            p = p.next
            del q
            
    def insert(self, i, item):
        if i < 0:
            raise IndexError('I is too small')
        previous = self._head
        count = 0
        while previous.next != self._head and count < i:
            previous = previous.next
            count += 1
        if count < i:
            raise IndexError('i is too big')
        following = previous.next
        new_node = DuNode(item, previous, following)
        previous.next = new_node
        following.prior = new_node
        
    def remove(self, i):
        if i < 0:
            raise IndexError("I is too small,no element is in position i")
        previous = self._head
        t = 0
        while previous.next != self._head and t < i:
            previous = previous.next
            t += 1
        if t < i or previous.next == self._head:
            raise IndexError("I is too big ,no element is in position i")
        current = previous.next
        previous.next = current.next
        current.next.prior = previous
        item = current.entry
        del current
        return item
        
    def retrieve(self, i):
        if i < 0:
            raise IndexError("I is too small,no element is in position i")
        p = self._head.next
        j = 0
        while p != self._head and j < i:
            p = p.next
            j += 1
        if p == self._head:
            raise IndexError("I is too big ,no element is in position i")
        else:
            return p.entry
        
    def contains(self, item):
        current = self._head.next
        while current != self._head:
            if current.entry == item:
                return True
            current = current.next
        return False
    
    def traverse(self):
        p = self._head.next
        l = []
        while p != self._head:
            l.append(p.entry)
            p = p.next
        return l
    
    def __str__(self):
        current = self._head.next
        element = ''
        while current != self._head:
            element += str(current.entry)
            current = current.next
        return element

if __name__ == '__main__':
    l = Do_nonCycLinkList()
    l.insert(0, 1)
    l.insert(1, 2)
    l.insert(2, 3)
    print(l)
    print(l.contains(4))

望采纳,谢谢

从头到尾遍历下链表的结点即可知道长度。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^