Отдельно связанный список с двумя классами, узлом и LinkedList, достаточно прост для реализации. однако моя проблема заключается в том, когда речь идет о односвязном списке с единственным доступом к первому узлу (без сохранения длины, без доступа к последнему узлу и без использования фиктивных узлов). Специальные методы, которые я не могу обернуть мою голову вокруг или найти много об Интернете похожи на питон встроенных в списке операциях с O (1) сложностью, например следующим образом:Отдельно связанный список со специальными методами в python, stuck
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)
Любого вид свинца, помощи, руководство будет с благодарностью оценено. По какой-то причине я просто не могу интерпретировать встроенные операторы списков pythons в свои собственные методы в 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)
Пожалуйста, разместите свой текущий код, даже если он не является полностью функциональным. –
Как я уже сказал, я не знаю, что я делаю в этот момент. Мне просто нужно руководство. Но heres полный класс узла и базовый класс LinkedList – DJXiej
Просто из любопытства вы находитесь в классе, изучающем инкапсуляцию и программирование OO? В Python немного странно делать что-то вроде 'node.setData (5)', когда вы обычно можете просто «node.data = 5'. Вы также можете использовать декораторы для обертывания переменных, если вам нужно контролировать доступ к ним. –