在尾部python处插入节点

时间:2018-11-04 08:05:36

标签: python data-structures

我试图在节点的尾部插入一个节点,但我的列表一直保存着最后一个值

如果我尝试在头部插入1,5,7,在尾部插入9。当我将其打印出来时,我只会看到9

class Node:
    def __init__(self,val,next=None)
        self.val = val
        self.next = next

head = None

def insert(val, pos = 'h')
    global head
    if head == None:
        newNode = Node(val)
        newNode.next = None
        head = newNode
    elif pos == 'h':
        newNode = Node(val)
        newNode.next = head
        head = newNode
    elif pos == 't':
        newNode = Node(val)
        newNode.next = None

        #stuck here
        while(head != None):
            head = head.next
        head = newNode

5 个答案:

答案 0 :(得分:0)

我认为这里有两个错误。一种是您要替换全局头(如果在末尾添加,则必须保持不变)。对循环使用局部变量。其次,您是用新节点而不是其.next字段替换头本身。

答案 1 :(得分:0)

在您的代码中,头与尾之间没有任何联系。像这样更改您的代码。

  elif pos == 't':
        newNode = Node(val)
        head.next = newNode
        newNode.next = None

您可以删除下面的部分

#stuck here
        while(head != None):
            head = head.next
        head = newNode

答案 2 :(得分:0)

添加尾节点时,请使用head的副本,当到达尾节点时,将新节点添加到它的“ .next”中:

 # stuck here
    tail = head
    while(tail.next is not None):
        tail = tail.next
    tail.next = newNode

在您的示例中,您将head的全局值更改为指向刚添加的新节点。

答案 3 :(得分:0)

关于您的实现的很多事情都是不推荐/不赞成的。例如,您不需要为head使用全局变量。

class Node:
  def __init__(self, val):
    self.val = val
    self.next = None

def insert_head(head, val):
  node = Node(val)
  node.next = head
  head = node
  return head

def insert_tail(head, val):
  if head is None:
    return Node(val)
  head.next = insert_tail(head.next, val)
  return head

head = insert_head(None, 1)
head = insert_head(head, 5)
head = insert_head(head, 7)
head = insert_tail(head, 9)

例如,这是一个提供相同功能的实现。要在头插入,我们只需创建一个具有给定值的新Node,将其下一个元素指向head指向的对象,然后将head指向该节点即可。

为了在尾部插入,我们使用了优雅的递归实现。即使提供的head节点为None,这两个功能也可以工作。

为什么要分为两个功能?因为通常您希望函数仅执行一个定义明确的任务。如果某个函数过于复杂,则应将其分解为一些较小的函数(同样可以做一件事并且做得很好)。新手经常根据提供的某些参数编写具有复杂行为的函数,但这在很大程度上不利于该函数的可读性,调试或性能。

答案 4 :(得分:0)

您可以使用这样的类:

class Node:
    def __init__(self, val, next=None):
        self.val = val
        self.next = next


head = None


def insert(val, pos='h'):
    global head
    if head is None:
        newNode = Node(val)
        newNode.next = None
        head = newNode
    elif pos == 'h':
        newNode = Node(val)
        newNode.next = head
        head = newNode
    elif pos == 't':
        newNode = Node(val)
        head.next = newNode
        newNode.next = None