将元素添加到链接列表的末尾

时间:2014-10-01 11:50:06

标签: python

我在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来执行此行为?

由于

3 个答案:

答案 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