在python链表中的另一个项目之后插入

时间:2019-06-27 06:02:20

标签: python linked-list

我正在尝试插入另一个项目,但是我的代码不起作用。以下函数insert_after_another不起作用。

class LinkedList:
    def __init__(self):
        self.head = None

    def insert_end(self,data):
        x = Node(data)
        if self.head == None:
            self.head = x
            return
        temp = self.head
        while(temp.next != None):
            temp = temp.next
        temp.next = x

   def insert_after_another(self,old_data,new_data):
        t_old = Node(old_data)
        d_new = Node(new_data)
        temp = self.head
        while(temp):
            if temp.data == old_data:
                d_new.next = t_old.next
                t_old.next = d_new

            temp = temp.next

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


if __name__=='__main__':
    llist = LinkedList()
    llist.insert_end(3)
    llist.insert_end(32)
    llist.insert_after_another(3,13)

尝试打印数据时没有任何结果。

2 个答案:

答案 0 :(得分:1)

d_new.next = t_old.next

t_old.next这行什么都没有指向,也没有指向它的指针,它只是您之前创建的一个节点。

def insert_after_another(self,old_data,new_data):
        d_new=Node(new_data)
        temp=self.head
        while(temp):
            if temp.data==old_data:
                d_new.next = temp.next
                temp.next = d_new
                break

我认为这可能有效。 您只需要两次交换, 新节点应指向旧节点的下一个节点, 旧节点应指向新节点。

答案 1 :(得分:0)

这将能够解决您的问题。考虑使用正确的标识并重命名您的方法。

def insert_after_value(self, old_data, new_data):

    if self.head is None:
        return

    if self.head.data == old_data:
        self.head.next = Node(new_data, self.head.next)
        return

    temp = self.head

    while temp:
        if temp.data == old_data:
            temp.next = Node(new_data, temp.next)
            break

    temp = temp.next