【问题标题】:How to check if item is in a Linked List?如何检查项目是否在链接列表中?
【发布时间】:2018-02-25 05:09:54
【问题描述】:

基本上,我想检查一个项目是否在链接列表中。该函数被描述为__contains__,如果我输入3 in myList,它将返回TrueFalse,具体取决于链接列表中是否存在整数3。

class Node:
    def __init__(self,item = None, link = None):
        self.item = item
        self.next = link

    def __str__(self):
        return str(self.item)

class LinkedList:
    def __init__(self):
        self.head = None
        self.count = 0

    def __str__(self):
        current = self.head
        ans = str(current)
        for _ in range(len(self)):
            current = current.next
            ans += '\n'
            ans += str(current)
        return ans

    def _get_node(self,index):
        if 0<= index< len(self):
            current = self.head
            while index>0:
               current = current.next
               index -=1
            return current

    def __contains__(self,item):         #need some help here
        if self.isEmpty():
            raise StopIteration("List is empty")
        if self.head == item:
             return True
        nextItem = self.head.next

    def insert(self,index,item):
        if index < 0 or index > len(self):
            raise IndexError("Index is out of range")
        else:
            newNode = Node(item)
            if index == 0:
                newNode.next = self.head
                self.head = newNode
            else:
                before = self._get_node(index-1)
                newNode.next = before.next
                before.next = newNode
            self.count+=1
            return True

if __name__ == "__main__":
    L = LinkedList()
    L.insert(0, 0)
    L.insert(1, 1)
    L.insert(2, 2)
    L.insert(3, 3)
    print(0 in L)

在遍历链表并检查项目是否在其中时,我感到很困惑。最后一行中的print(0 in L) 应该返回True,因为0 确实在链接列表中。

【问题讨论】:

  • 我建议首先使 LinkedList 实例可迭代。请参阅How to make a custom object iterable?,然后编写__contains__() 会相对容易——只需遍历Nodes,直到找到该项目或到达列表末尾但没有找到它。
  • 请粘贴_get_node()函数的代码
  • @GuangshengZuo 请看更新后的问题

标签: python class linked-list


【解决方案1】:

这是您问题的答案:

def __contains__(head,data):
    if head == None:
        return False
    else:
        p = head
        while p is not None:
            if p.data == data:
                return True
            p = p.next
        return False

【讨论】:

  • 这不符合他的类定义,甚至不是一个有效的方法定义。
猜你喜欢
  • 1970-01-01
  • 2019-07-26
  • 2011-09-02
  • 2017-12-21
  • 2021-06-25
  • 2012-06-30
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多