Проблема с Python3 Singlely Linked List - PullRequest
0 голосов
/ 01 июля 2019

Я написал простой единый связанный список через 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 Ответ

2 голосов
/ 01 июля 2019

Вам нужно будет немного изменить метод search.

Это просто означает, что, пока cur не указывает на None, продолжайте цикл. Когда переменная cur инициализируется в первый раз, она указывает на первый элемент, который не является None. Если вы попытаетесь выполнить цикл с использованием условия while not cur, условие оценивается как ложное в самой первой итерации, и оно будет 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
...