具有两个类 Node 和 LinkedList 的单链表很容易实现。但是我的问题是当涉及到一个只有第一个节点访问的单链表时(没有存储长度,没有最后一个节点访问,并且没有使用虚拟节点)。我无法绕开或在网上找到太多关于的特殊方法类似于具有O(1)复杂度的pythons内置列表操作,例如:
aa = LinkedList() -- creates empty list
aa.first() -- similar to aa[0]
aa.rest() -- similar to aa[1:]
aa.cons(item) -- similar to aa[item:]
[item] + aa -- similar to aa.insert(0, item)
任何形式的领导、帮助、指导将不胜感激。出于某种原因,如果没有虚拟节点或存储长度和迭代器,我无法将 python 的内置列表运算符解释为我自己在 LinkedList 中的方法。看着它,我似乎离得很近,但我所做的或发现的一切似乎都无济于事。谢谢你。
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = next
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self, newdata):
self.data = newdata
def setNext(self, newnext):
self.next = newnext
def __str__(self):
return str(self.data)
def __repr__(self):
return "Node(%s, %s)" % (repr(self.data), repr(self.next))
def __eq__(self, other):
return self.data == other.data and self.next == other.next
class myList:
def __init__(self):
self.first = Node()
def add(self, data):
newNode = Node() # create a new node
newNode.data = data
newNode.next = self.first # link the new node to the 'previous' node.
self.first = newNode # set the current node to the new one
def first(self):
return self.first.data
def __repr__(self):
plist = []
for i in self:
plist.append(i)
return "LinkedList(%s)" % str(plist)