Python 程序将元素添加到链表的第一个和最后一个位置
在 Python 中,链表是一种线性数据结构,由一个节点链组成,其中每个节点包含一个值和对链中下一个节点的引用。
在本文中,我们将讨论如何在 Python 中将元素添加到链表的第一个和最后一个位置。
Python 中的链表
链表是一种引用数据结构,包含一组元素。它与数组类似,但数组中的数据存储在连续的内存位置,而链表中的数据不受该条件的约束。这意味着数据不是一个接一个地存储,而是以随机方式存储在内存中。
这引发了一个问题,即我们如何访问链表中的元素?答案在链表中非常直观,一个元素指向另一个元素,直到列表末尾。
列表的开头和结尾被视为特殊位置。列表的开头称为其头部,它指向第一个元素,最后一个元素是特殊的,因为它指向 NULL。
头部 -> data_1 -> data_2 -> … -> data_n -> NULL
现在我们知道如何访问链表的开头和结尾,让我们看看如何遍历元素并访问链表中的数据。
遍历链表非常简单,我们只需从头部开始并访问下一个节点;我们继续执行此过程,直到找到下一个节点为 NULL 的节点。至于访问节点中的数据,我们使用箭头运算符"->"。
Head->data
现在我们已经了解了开始解决问题所需的所有知识。
在开头添加元素
要在链接列表的开头添加数据,我们必须考虑链接列表的头部。每当我们在链接列表的开头添加一个节点时,链接列表都会被修改,新添加的节点将成为列表的第一个节点/头部。
算法
步骤 1 – 创建新节点
步骤 2 – 在新创建的节点中添加数据
步骤 3 – 更新新节点的链接并使其指向当前头节点
步骤 4 – 现在使头指针等于新创建的节点
注意 – 这些步骤的顺序最重要,因为如果您先将新创建的节点设为头节点,那么我们将无法更新新节点的链接,而该链接理想情况下应该指向上一个头节点。
示例
class Node: def __init__(self, data): self.dataPart = data self.nextNode = None class LinkedList: def __init__(self): self.headNode = None def showList(self): n = self.headNode while n is not None: print(n.dataPart, end='-') n = n.nextNode print('') def addBeginList(self, data): tempNode = Node(data) tempNode.nextNode = self.headNode self.headNode = tempNode newLinkedList = LinkedList() print("在添加元素之前打印列表:") newLinkedList.showList() newLinkedList.addBeginList(10) newLinkedList.addBeginList(25) print("在列表开头添加元素后打印元素") newLinkedList.showList()
输出
在添加任何元素之前打印列表: \ 在列表开头添加元素后打印元素 25-10-\
在末尾添加元素
在末尾添加元素,在逻辑上与在列表开头添加元素不同。这次我们需要访问列表的最后一个节点,而不是第一个节点,即 head。
现在的问题是检查我们尝试添加元素的列表是否为空列表,或者它是否已经包含一些元素。
如果列表为空,则新节点将是列表的第一个节点,否则将是最后一个节点。为此,我们需要检查头节点是否为 None。如果头节点为 None,则列表被视为空,否则不为空。
算法
步骤 1 – 创建新节点。
步骤 2 – 在节点的数据部分添加数据。
步骤 3 – 确保新创建节点的下一个节点指向 None 或 Null 指针。
步骤 4 – 如果列表为空,则将新创建的节点作为头节点。
步骤 5 - 否则遍历到列表末尾的最后一个节点。
步骤 6 – 将最后一个节点的下一个节点设置为新创建的节点。
示例
class Node: def __init__(self, data): self.dataPart = data self.nextNode = None class LinkedList: def __init__(self): self.headNode = None def showList(self): n = self.headNode while n is not None: print(n.dataPart, end='-') n = n.nextNode print("") def addEndList(self, data): tempNode = Node(data) if self.headNode is None: self.headNode = tempNode else: n = self.headNode while n.nextNode is not None: n = n.nextNode n.nextNode = tempNode newLinkedList = LinkedList() print("插入前打印列表:") newLinkedList.showList() newLinkedList.addEndList(25) newLinkedList.addEndList(10) print("在列表末尾添加元素后打印列表:") newLinkedList.showList()
输出
插入前打印列表: \ 在列表末尾添加元素后打印列表: 25-10-\
结论
在本文中,我们讨论了如何使用 Python 类来实现链接列表,以及如何向链接列表添加元素。我们重点介绍了在列表开头和结尾添加元素。