在Python LinkedList中,为什么要使用sentinel节点而不是None或Null节点
LinkedList的这些构造函数之间有什么区别,为什么一个比另一个好还是坏在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
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)
,如果您真的想要一个哨兵,可能还需要一个不接受数据的构造函数。