C++程序 向链表中插入节点
我们在前面的帖子中介绍了链表。 我们还创建了一个包含3个节点的简单链表,并讨论了链表的遍历。
本帖子中考虑以下链表的表示。
在本帖子中,讨论了在链表中插入新节点的方法。 新节点可以通过以下三种方式添加:
1) 在链表的最前面。
2) 在给定节点之后。
3) 在链表的末尾。
在最前面添加节点:(4步流程)
新节点总是添加在给定链表的头之前。新添加的节点成为链表的新头。例如,如果给定的链表是10->15->20->25,我们在前面添加一个项5,则链表变为5->10->15->20->25。让我们称在列表前面添加的函数为push()。push()必须接收指向头指针的指针,因为push必须更改头指针以指向新节点(请参阅此处)
这是使用类创建4个节点的链接列表的示例:
输出
说明: 我们要在链表的开头插入元素3、8、2和5,它将输出为—> 3→8→2→5→。
push()的时间复杂度为O(1),因为它只做了固定量的工作。
在给定节点之后添加节点:(5步流程)
给定一个指向节点的指针,新节点插入在给定节点之后。
insertAfter()的时间复杂度为O(1),因为它只做了固定量的工作。
在末尾添加一个节点:(6个步骤的过程)
新节点总是添加在给定链表的最后一个节点后面。比如,如果给定的链表是5->10->15->20->25, 如果我们在末尾添加一个元素30,那么链表将变成5->10->15->20->25->30。
由于链表通常是通过其头部来表示的,我们必须遍历链表直至末尾,然后将倒数第二个节点改为新的节点。
下面是添加节点到末尾的6个步骤。
添加一个节点的时间复杂度是O(n),其中n是链表中节点的数量。由于从头到尾有一个循环,所以该函数执行O(n)的工作。
通过保留链接列表尾部的额外指针,也可以将此方法优化为O(1)的算法。
下面是使用所有上述方法创建链表的完整程序。
输出:
时间复杂度: : O(N)其中N是给定链接列表的大小
辅助空间: : O(1)