我在python中完成了以下链接列表,它工作正常,但我想知道是否有另一种方法将add_item部分添加到链表中。在那部分我想要做的是在第一个元素中保留一个指针,然后在它前面添加元素,例如:
1 第一
1 -----→2 第一
1 -----→2 -----→3 第一次
我的代码是:
class Node:
def __init__(self,elem=None,next=None):
self.elem=elem
self.next=next
def __repr__(self):
return 'Node(elem={}, next={})'.format(self.elem, self.next)
class LinkedList:
def __init__(self):
self.size=0
self.first=None
self.linkedlist=Node()
def add(self,elem):
node=Node(elem)
if self.size==0:
self.first=node
else:
self.linkedlist.next=node
self.linkedlist=node
self.size=self.size+1
有没有另一种方法可以使用我在LinkedList类的构建器中使用的辅助self.linkedlist来执行此行为?
由于
答案 0 :(得分:1)
跟踪最后一个元素,并始终将新节点跟踪到下一个元素。然后更新最后一个
class Node:
def __init__(self, elem=None, next=None):
self.elem = elem
self.next = next
class LinkedList:
def __init__(self):
self.size = 0
self.first = None
self.last = None
def add(self, elem):
node = Node(elem)
if self.size == 0:
self.first = node
self.first.next = node
self.last = node
else:
self.last.next = node
self.last = node
self.size += 1
答案 1 :(得分:1)
我认为类似下面的方法会起作用:
class LinkedList:
# what you have so far
def add_to_front(self, elem):
if self.size == 0:
self.add(elem)
else:
node = Node(elem, self.first)
self.first = node
self.size += 1
您目前在self.first
中引用了列表的头部,并在self.linkedlist
中引用了当前尾部。这样可以在任何一点进行有效的添加。
ll = LinkedList()
for i in xrange(3):
ll.add_to_front(i)
>>> ll.linkedlist
Node(elem=0, next=None)
>>> ll.first
Node(elem=2, next=Node(elem=1, next=Node(elem=0, next=None)))
>>> ll.add('x')
>>> ll.linkedlist
Node(elem=x, next=None)
>>> ll.first
Node(elem=2, next=Node(elem=1, next=Node(elem=0, next=Node(elem=x, next=None))))
>>>
答案 2 :(得分:0)
试试这个(我只更改了add方法。这不涉及linkedlist类成员。) -
class LinkedList:
def __init__(self):
self.size=0
self.first=None
def add(self,elem):
if self.size == 0:
self.first = Node(elem)
else:
self.first = Node(elem, self.first)
self.size += 1