LinkedList - NameError: name 'target' is not defined

LinkedList - NameError: name 'target' is not defined

我正在学习 LinkedList。我运行这一次。但是当我再次尝试 运行 这段代码时,它没有成功。我想知道为什么。当我尝试调用方法“删除”时出现错误 首先,创建了一个 class 链表。然后我们向这个 class 添加新方法。方法“addFirst”用于在链表的开头插入元素。另一方面,“addLast”方法用于在链表的末尾插入元素。 “addAfter”用于在目标节点之后插入元素。类似于“addBefore”方法,而“remove”方法用于删除链表中的节点。

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

    def __repr__(self):
        node = self.head
        nodes = []
        while node is not None:
          nodes.append(node.data)
          node = node.next
        nodes.append("None")
        return " -> ".join(nodes)

    def __iter__(self):
        node = self.head
        while node is not None:
          yield node
          node = node.next

    def add_first(self, node):
        node.next = self.head
        self.head = node

    def add_last(self, node):
        if self.head is None:
            self.head = node
            return
        for current_node in self:
            pass
        current_node.next = node

    def add_after(self, target_node_data, new_node):
        if self.head is None:
          raise Exception("List is empty")
        for node in self:
          if node.data == target_node_data:
            new_node.next = node.next
            node.next = new_node
            return
        raise Exception("Target not found")

    def add_before(self, target_node_data, new_node):
        if self.head is None:
            raise Exception("List is empty")
        if self.head.data == target_node_data:
            return self.add_first(new_node)
        prev_node = self.head
        for node in self:
            if node.data == target_node_data:
                prev_node.next = new_node
                new_node.next = node
                return
            prev_node = node
        raise Exception("Target Node not found")

    def remove_node(self, target_node_data):
         if self.head is None:
          raise Exception("List is empty")

         if self.head.data == target_node_data:
          self.head = self.head.next
          return

         previous_node = self.head
         for node in self:
          if node.data == target.node.data:
            previous_node.next = node.next
            node.next = None
            return
          previous_node = node
        
         raise Exception("Target Node not found")


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

    def __repr__(self):
        return self.data


llist = LinkedList()
first_node = Node("a")
llist.head = first_node
second_node = Node("b")
third_node = Node("c")
first_node.next = second_node
second_node.next = third_node
for node in llist:
  print(node)


llist.add_first(Node("b2"))
llist

llist.add_last(Node("b"))
llist

llist.add_after("a", Node("b"))
llist

llist.remove_node("a")

应该是target_node_data而不是target.node.data:

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

    def __repr__(self):
        node = self.head
        nodes = []
        while node is not None:
            nodes.append(node.data)
            node = node.next
        nodes.append("None")
        return " -> ".join(nodes)

    def __iter__(self):
        node = self.head
        while node is not None:
            yield node
            node = node.next

    def add_first(self, node):
        node.next = self.head
        self.head = node

    def add_last(self, node):
        if self.head is None:
            self.head = node
            return
        for current_node in self:
            pass
        current_node.next = node

    def add_after(self, target_node_data, new_node):
        if self.head is None:
            raise Exception("List is empty")
        for node in self:
            if node.data == target_node_data:
                new_node.next = node.next
                node.next = new_node
                return
        raise Exception("Target not found")

    def add_before(self, target_node_data, new_node):
        if self.head is None:
            raise Exception("List is empty")
        if self.head.data == target_node_data:
            return self.add_first(new_node)
        prev_node = self.head
        for node in self:
            if node.data == target_node_data:
                prev_node.next = new_node
                new_node.next = node
                return
            prev_node = node
        raise Exception("Target Node not found")

    def remove_node(self, target_node_data):
        if self.head is None:
            raise Exception("List is empty")

        if self.head.data == target_node_data:
            self.head = self.head.next
            return

        previous_node = self.head
        for node in self:
            if node.data == target_node_data:
                previous_node.next = node.next
                node.next = None
                return
            previous_node = node

        raise Exception("Target Node not found")


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

    def __repr__(self):
        return self.data


llist = LinkedList()
first_node = Node("a")
llist.head = first_node
second_node = Node("b")
third_node = Node("c")
first_node.next = second_node
second_node.next = third_node
for node in llist:
    print(node)

llist.add_first(Node("b2"))
llist

llist.add_last(Node("b"))
llist

llist.add_after("a", Node("b"))
llist

llist.remove_node("a")