在Python LinkedList中,为什么要使用sentinel节点而不是None或Null节点

在Python LinkedList中,为什么要使用sentinel节点而不是None或Null节点,python,linked-list,Python,Linked List,LinkedList的这些构造函数之间有什么区别,为什么一个比另一个好还是坏 class Node: def __init__(self, data): self.data = data self.next = None class Singly_Linked_List: def __init__(self): self.head = None 与: class Singly_Linked_List: def __ini

LinkedList的这些构造函数之间有什么区别,为什么一个比另一个好还是坏

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

class Singly_Linked_List:
    def __init__(self):
        self.head = None
与:

class Singly_Linked_List:
    def __init__(self):
        self.head = Node(0)

这是否会影响例如addAtIndex、removeAtIndex函数的SLL或DLL实现方式?

您如何知道它是sentinel节点而不是值为0的常规节点?注意,python没有
null
。。。但是
None
实际上是很好的,这样做很自然,因为您知道
next
将始终是
节点
None
,即它是
可选的[Node]
。在许多学术处理中,您定义了一个特殊的
节点
对象作为哨兵,但是
在这种情况下起作用,并且非常惯用
Node(0)
肯定是一个不好的选择,您可能只想做一些类似于
class EndNode(Node):pass
的事情,然后使用
isinstance(Node,EndNode)
,如果您真的想要一个哨兵,可能还需要一个不接受
数据的构造函数。