Python3单链列表成就问题

时间:2019-07-01 10:13:47

标签: python python-3.x linked-list singly-linked-list

我已经通过Python3编写了一个简单的单链表,但是该类中的搜索功能未正确执行。 我认为其他功能还可以。

class Node():
    """节点"""
    def __init__(self, elem):
        self.elem = elem
        self.next = None  #initialed the next node as None

class SingleLinkList():
    """single linked list"""
    def __init__(self, node=None):
        self.__head = node

    def travel(self):
        '''traversing the linked list'''
        cur = self.__head
        while cur != None:
            print(cur.elem, end = ' ')
            cur = cur.next
        print('\n')

    def add(self, item):
        '''Add elements to the list header'''
        node = Node(item)
        node.next = self.__head
        self.__head = node

    def search(self, item):
        '''Verify node existence'''
        cur = self.__head
        while not cur:
            if cur.elem == item:
                return True
            else:
                cur = cur.next
        return False

l1 = SingleLinkList()
l1.add(2)
l1.add(3)
l1.travel()
print(l1.search(2))

[~]$ python3 temp.py
3 2
False

很显然,当搜索int 2时,它应该包含在列表中,因此输出应该是True以外的False。您能帮我解决吗?

1 个答案:

答案 0 :(得分:2)

您必须对search方法做些微改动。

这仅表示直到cur指向None之前,一直循环播放。变量cur首次初始化时,它指向第一个元素,而不是None。如果您尝试使用条件while not cur进行循环,则条件在第一次迭代中的结果为false,并且在所有情况下都将为return False

def search(self, item):
    '''Verify node existence'''
    cur = self.__head
    while cur:
        if cur.elem == item:
            return True
        cur = cur.next
    return False