【问题标题】:LinkedList - NameError: name 'target' is not definedLinkedList - NameError:名称“目标”未定义
【发布时间】:2021-10-07 09:28:02
【问题描述】:

我正在学习 LinkedList。我跑过一次。但是当我再次尝试运行此代码时,它没有成功。我想知道为什么。当我尝试调用方法“删除”时显示错误 首先,创建了一类链表。然后我们向这个类添加新方法。方法“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")

【问题讨论】:

    标签: python linked-list


    【解决方案1】:

    应该是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")
    

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 2020-06-27
      • 2019-12-31
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多