`
chentingk
  • 浏览: 19975 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

多益链表删除O(1)复杂度

 
阅读更多
#include <iostream>
#include <stdio.h>
using namespace std;

typedef struct LinkList
{
	int data;
	LinkList* p_next;
};
void NodeToBeDeleted(LinkList *root ,LinkList *ToBeDeleted);
void ReadList(LinkList *root);
void LinkTest()
{
	LinkList *list1;
	list1=new LinkList;
	list1->data=1;
	LinkList *list2;
	list2=new LinkList;
	list2->data=2;
	LinkList *list3;
	list3=new LinkList;
	list3->data=3;
	LinkList *list4;
	list4=new LinkList;
	list4->data=4;
	LinkList *list5;
	list5=new LinkList;
	list5->data=5;
	LinkList *list6;
	list6=new LinkList;
	list6->data=6;

	list1->p_next=list2;
	list2->p_next=list3;
	list3->p_next=list4;
	list4->p_next=list5;
	list5->p_next=list6;
	list6->p_next=NULL;
	NodeToBeDeleted(list1,list6);
	ReadList(list1);


}
void NodeToBeDeleted(LinkList *root ,LinkList *ToBeDeleted)
{
	LinkList *temp;
	if(ToBeDeleted->p_next!=NULL)
	{
		temp=ToBeDeleted->p_next;
		ToBeDeleted->data=temp->data;
		ToBeDeleted->p_next=temp->p_next;
		delete temp;
	}
	else
	{
		temp=root;
		while(temp->p_next!=ToBeDeleted)
			temp=temp->p_next;
		temp->p_next=NULL;
		delete ToBeDeleted;
	}
	
}
void ReadList(LinkList *root)
{
	LinkList *p=root;
	while(p!=NULL)
	{
		cout<<p->data<<" ";
		p=p->p_next;
	}
	cout<<endl;
}

 节点要new

删除是将它的下一个的值赋给它然后将ToBeDeleted的next指针跳过下一个

尾节点则要按一般方法删除

分享到:
评论

相关推荐

    数组和链表的时间复杂度 (1) 数组和链表.pdf

    数组的插入、删除操作时间复杂度为 O(n),而链表的插入、删除操作时间复杂度为 O(1)。数组的随机访问时间复杂度为 O(1),而链表的随机访问时间复杂度为 O(n)。理解这些时间复杂度对数据结构的选择和算法设计非常重要...

    数组和链表的时间复杂度 数组和链表.pdf

    因此,链表的插入、删除操作都可以在O(1)时间内完成。但是,链表的随机访问却是O(n),这是因为链表需要遍历每个元素来找到指定的元素。 如何理解链表的随机访问?例如list想要到第N+1个元素位置,需要一个一个遍历...

    动态数组和链表的复杂度分析 数组和链表.pdf

    在最好情况下,当删除的是末尾的元素时不需要移动数组中的元素,也是最好情况下的复杂度,复杂度为O(1)。在最坏情况下,当删除的是数组的首元素,则需要将后面的所有元素前移,也是最坏情况下的复杂度,复杂度为O(n)...

    链式数据结构的渐近复杂度分析.pptx

    #### 带头节点链表删除末尾节点的时间复杂度 在带有头节点的链表中,删除末尾节点的时间复杂度为 O(1)。这是因为,与普通链表不同,带头节点的链表可以通过头节点直接定位到链表的尾部。这意味着不需要遍历整个链表...

    链表的删除

    链表删除操作的时间复杂度通常为O(n),其中n是链表的长度,因为最坏情况下需要遍历整个链表。空间复杂度为O(1),因为仅需要几个额外的变量来辅助操作。 掌握链表的删除操作是理解数据结构和算法的基础,这对于编写...

    线性链表的基本操作(C语言)

    删除操作的时间复杂度是O(n),其中n是链表的长度。 排序操作 排序操作是指对链表中的结点进行排序。排序操作可以使用不同的排序算法,例如冒泡排序、选择排序、插入排序等。排序操作的时间复杂度取决于所使用的...

    链表题目总结1

    - **合并两个有序链表** (问题21):最优解的时间复杂度是O(m+n),空间复杂度是O(1),通过新建链表并同时遍历两个链表实现。 - **环形链表** (问题141):使用快慢指针可以检测链表中是否存在环,时间复杂度是O(n),...

    2.5 线性表习题集1

    可以使用两个指针遍历链表,时间复杂度为O(n),空间复杂度为O(1)。 - **删除重复节点**:在递增非空单链表中删除值域重复的节点。遍历链表,比较当前节点和前一个节点的值,若相等则删除当前节点。时间复杂度为O(n)...

    链表的小程序

    12. 链表的复杂度分析:链表操作的时间复杂度通常为O(n),其中n是链表的长度,因为可能需要遍历整个链表。空间复杂度取决于具体实现,如是否使用额外的辅助结构。 通过学习和实践这些链表小程序,初学者可以深入...

    链表的基本操作,插入删除查找等

    时间复杂度通常是线性的,即O(n)。 - **遍历**:从头节点开始,沿着每个节点的指针顺序访问所有节点。可以打印节点数据或者执行其他操作。 - **倒置**:反转链表中的节点顺序。这可以通过迭代或递归实现,迭代方法...

    循环链表接口的定义1

    初始化操作的时间复杂度为O(1),因为这通常只是设置链表的头结点和一些基本属性。 2. `clist_destroy(CList *list)`: 这个函数用于销毁整个循环链表,包括所有的元素。在销毁过程中,会调用在`clist_init`中提供的`...

    Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度1

    - LinkedList 中插入或删除元素只需改变相邻节点的链接,时间复杂度为 O(1)。 4. 随机访问与顺序访问: - 对于已排序的大列表,如果需要频繁进行随机访问(如二分查找),ArrayList 由于其随机访问的优势,通常...

    单行链表与双向链表问题实例

    单向链表更节省空间,因为不需要存储反向引用,而双向链表提供了更多的操作灵活性,尤其是在需要频繁进行双向遍历或插入/删除操作的场景下。 总的来说,理解和熟练掌握链表的原理以及操作方法是编程基础中的重要一...

    02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?.pdf

    在理解哈希表的时间复杂度为什么是O(1)之前,我们需要先回顾一下基础的数据结构——数组和链表。 数组是最基础的数据结构,它在内存中占用连续的空间,每个元素都有一个唯一的索引,可以通过索引直接访问元素,这...

    链表的相关知识PPTX

    链表是一种基础的数据结构,广泛应用于各种领域,具有高效的插入和删除操作、灵活的内存管理和高效的遍历和查询操作等优点,但也存在一些缺点,如需要更多的内存来存储指针域和遍历和查询操作可能较慢等。

    C#单向链表C#单向链表C#单向链表

    - 插入和删除:在链表的开头或结尾进行操作时,时间复杂度为O(1),因为只需要修改几个指针。在链表中间操作时,时间复杂度为O(n),因为需要从头节点开始遍历找到目标位置。 - 遍历:遍历整个链表的时间复杂度为O(n)...

    go语言通过数组和链表的方式实现队列 数组和链表.pdf

    链表实现中,Offer操作的时间复杂度为O(1),Poll操作的时间复杂度为O(1),Peek操作的时间复杂度为O(1),Clear操作的时间复杂度为O(n),Size操作的时间复杂度为O(1),IsEmpty操作的时间复杂度为O(1),Print操作的时间...

    01基础数据结构之链表

    * 插入删除:数组插入删除的时间复杂度最坏是O(n),链表插入删除的时间复杂度是O(1)。 广度优先搜索(Breadth-First Search): * 广度优先搜索是一种搜索算法,它从根节点开始,逐层遍历节点,直到找到目标节点。...

    java实现链表

    链表是一种物理存储单元上非连续、非顺序的存储结构。 java代码实现单链表,插入,删除和遍历等功能。 链表能够灵活的进行插入和删除操作,时间复杂度为O(1),链表的查找时间复杂度为O(n)。

Global site tag (gtag.js) - Google Analytics