Односвязный список с двумя классами, Node и LinkedList, реализовать достаточно просто. однако моя проблема заключается в том, что речь идет об односвязном списке с доступом только к первому узлу (без сохраненной длины, без доступа к последнему узлу и без использования фиктивных узлов). Специальные методы, которые я не могу обдумать или найти в Интернете, похожи на встроенные в python операции со списками со сложностью O (1), например следующие:
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)
node.setData(5)
, когда обычно можно сделатьnode.data = 5
. Вы также можете использовать декораторы для переноса переменных, если вам нужно контролировать доступ к ним. - person Brent Writes Code   schedule 17.04.2012first
и переменная-член с именемfirst
. Одно скроет другое; переименовать один из них. Но, кстати, я рекомендую всегда объявлять ваши классы наследованием отobject
, чтобы у вас всегда была вся мощь наследования при написании программ на Python. например:class Node(object):
- person steveha   schedule 17.04.2012cons
ошиблись. Он должен добавитьitem
в начало списка, см. en.wikipedia.org/wiki/ Список_%28abstract_data_type%29 - person agf   schedule 17.04.2012