Python程序 将元素添加到链表的第一个和最后一个位置
在 Python 中,链表是一种线性数据结构,由一连串的节点组成,其中每个节点都包含一个值和对链中下一个节点的引用。
在这篇文章中,我们将讨论如何在 Python 中把一个元素添加到一个链接列表的第一个和最后一个位置。
Python 中的链表
它与数组类似,但在数组中,数据被存储在连续的内存位置,而在链表中,数据不受这种条件的约束。这意味着数据不是一个接一个地被存储,而是以随机的方式存储在内存中。
这就提出了一个问题,即我们如何访问链接列表中的元素?答案很直观,在链接列表中,一个元素指向另一个元素,直到列表的末端。
列表的开头和结尾被认为是特殊的位置。列表的开头被称为头,它指向第一个元素,最后一个元素是特殊的,因为它指向 NULL。
Head -> 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("Printing the list before adding element : ")
newLinkedList.showList()
newLinkedList.addBeginList(10)
newLinkedList.addBeginList(25)
print("Printing the elements after adding at the beginning of the list")
newLinkedList.showList()
输出
Printing the list before adding any element :
\
Printing the elements after adding at the beginning of the list
25-10-\
在结尾处添加元素
在末尾添加元素,在逻辑上与在列表的开头添加不同。这次我们需要访问列表的最后一个节点,而不是第一个节点,也就是头部。
现在的问题是要检查我们要添加元素的列表是否是一个空的列表,或者里面已经有一些元素。
如果列表是空的,那么新节点将是列表的第一个节点,而在其他情况下,它将是最后一个节点。为此我们需要检查头部节点是否为无。如果头部为无,则列表被视为空,否则就不为空。
算法
第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("Printing the list before insertion : ")
newLinkedList.showList()
newLinkedList.addEndList(25)
newLinkedList.addEndList(10)
print("Printing the list after adding elements at the end of the list : ")
newLinkedList.showList()
输出
Printing the list before insertion :
\
Printing the list after adding elements at the end of the list :
25-10-\
结语
在这篇文章中,我们讨论了如何使用 python 类来实现一个链表,以及如何向链表 中添加元素。我们重点讨论了在列表的开头和结尾添加元素。