【问题标题】:A linked list program using one class使用一个类的链表程序
【发布时间】:2020-09-19 21:23:39
【问题描述】:

是否可以在类 Node 中编写这个单链表程序,并通过消除类 LinkedList 并只使用一个类来使用其中的类 LinkedList 的所有方法?如果有可能,那么为什么我们更喜欢这样写,为什么不使用单个类呢? 有人说我们用它来跟踪头节点,但我不明白。我们可以简单地使用一个名为 head 的变量来存储头节点,然后在其他操作中进一步使用它。那么为什么头节点的类不同。

class Node:  

    def __init__(self, data):  
        self.data = data  
        self.next = None
  
class LinkedList:  
    
    def __init__(self):  
        self.head = None
  
    def push(self, new_data):  
        new_node = Node(new_data)  
        new_node.next = self.head  
        self.head = new_node  
 
    def deleteNode(self, key):  
          
        temp = self.head  
        if (temp is not None):  
            if (temp.data == key):  
                self.head = temp.next
                temp = None
                return
 
        while(temp is not None):  
            if temp.data == key:  
                break
            prev = temp  
            temp = temp.next
  
        if(temp == None):  
            return
  
        prev.next = temp.next
        temp = None
  
    def printList(self):  
        temp = self.head  
        while(temp):  
            print (" %d" %(temp.data)),  
            temp = temp.next

【问题讨论】:

  • 是的,这是可能的。想必人们会更清楚地区分链表和链表中的节点。
  • 你的方法。我有一个链表,我将它传递给一个函数。该函数删除第一个元素,然后返回。调用者现在挂在断开连接的元素上,而不是链表本身。将对象本身(链表)与作为对象实现的一部分的事物分开是一种更简洁的设计。
  • 同样,在你的方案中,什么是空链表?没有任何?如何调用它的方法?

标签: python oop data-structures linked-list


【解决方案1】:

有很多方法可以实现与LinkedList 类相同的接口。

其中一种方法是提供LinkedListdatanext 字段,其中next 指向一个链表...但是您为什么认为这样更好?您示例中的Node 类仅在LinkedList 中使用。它根本没有任何外部目的。这个 LinkedList 类的作者创建了两个类,因此他可以将应用于节点的操作与应用于整个列表的操作分开,因为他喜欢这样思考。您认为自己的方式是好是坏是一个选择问题...

但这就是为什么最好将LinkedList 与节点分开的真正原因:

在现实生活中的编程中,您会遇到许多单链表。其中没有可能是任何类型的List 类的实例。您将拥有一堆通过某种next 指针链接在一起的对象。您基本上只有节点。您将希望在这些链接节点上执行列表操作向它们添加列表方法,因为这些节点对象将有自己独特的目的——它们不是列表,您不会想要让他们列出来。

所以你上面的这个LinkedList 类是你如何对链接对象执行这些列表操作。您将永远在现实生活中编写此课程,但您会多次使用这些技术。

【讨论】:

  • 我得到了你的 60% 。但是您仍然可以给我任何示例,以便更好地了解使用 Linkedlist 类或不使用 Linkedlist 类之间的区别。
猜你喜欢
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
相关资源
最近更新 更多