`
chentingk
  • 浏览: 19082 次
  • 性别: 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指针跳过下一个

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

分享到:
评论

相关推荐

    java实现链表

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

    循环链表实验报告(word文档,详细解说)

    一、实验题目:循环链表的实现 ...1、循环链表的查找include函数: 平均检索成功花费的比较次数为(1+2+…+n)/n=(n+1)/2因此其时间复杂度为O(n) 2、循环链表的复制duplicate函数: 时间复杂度是O(n)

    2. 线性表-链式存储-链表1

    第二节 线性表-链式存储-链表回顾数组时间复杂度:访问:由于可以随机访问,O(1)插入:O(n)删除:O(n)静态操作:常数时间内完成动态操作:线性时间内完成此

    关于数据结构中数组、链表、队列、散列表、集合的理解

    经过一上午的学习,对数据...查找链表节点的时间复杂度是O[n],中间插入、删除节点的时间复杂度是O(1)。 栈 栈是一种线性逻辑结构,可以使用数组实现,也可以使用链表实现。包含入栈还有出栈操作,遵循先入后出的原则(F

    NOI 集训队论文 对块状链表的一点研究

    链表能够在O(1)的时间内插入和删除一段数据,但是在寻找操作位置时,却要遍历整个链表,复杂度同样时O(n)的。 这两种数据结构各有优缺点,我们尝试将两种数据结构融合成一个全新的数据结构:块状链表。

    定时器--升序链表

    本资源是定时器链表。他是一个升序、双向链表。对于定时器数量比较少的话,还是可用的。 时间复杂度:插入O(n) 删除 O(1) 操作 O(1)

    给定链表的头指针和一个结点指针,在O(1)时间删除该结点

    有详细的讲解和代码,而且代码不是伪码,方便大家学习。

    Java LinkedList 双向链表实现原理

    相信大家都明白 LinkedList 是基于双向链表而实现的,本篇文章主要讲解一下双向链表的实现,并且我们参考 LinkedList 自己实现...由于不必须按顺序存储,链表的插入和删除操作可以达到 O(1) 的复杂度。 而双向链表比单

    python无序链表删除重复项的方法

    在遍历链表的过程中,使用了常数个额外的指针变量来保存当前遍历的结点,前驱结点和被删除的结点,所以空间复杂度为O(1) #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2020/1/15 20:55 # @Author : ...

    python数据结构与算法详解与源码

    1-02 时间复杂度与大O表示法 1-03-最坏时间复杂度与计算规则 1-04-常见时间复杂度与大小关系 1-05-代码执行时间测量模块 1-06-Python列表类型不同操作的时间效率 1-07-Python列表与字典操作的时间复杂度 1-08-...

    数组,链表,跳表(双指针法)Array例题

    更适合插入、删除操作频繁的场景,时间复杂度 O(1) 访问时遍历链表 ,平均情况时间复杂度为O(n) 跳表 空间换时间,多级索引来提高查询的效率,实现了基于链表的“二分查找”,是一种动态数据结构,支持快速的插入、...

    集合底层源码分析.doc

    链表:链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。 哈希表((Hash table):由数组+链表组成的。既满足了数据的查找方便,同时...

    数据结构——用C描述

    1.3 (1) O(n) (2) (2) O(n) (3) (3) O(n) (4) (4) O(n1/2) (5) (5) 执行程序段的过程中,x,y值变化如下: 循环次数 x y 0(初始) 91 100 1 92 100 2 93 100 …… …… …… 9 100 100 10 101 100 11 91 99 12 92 ...

    编写一个链表

    2.1 顺序表。(任选其一) (1)编写一个程序,其功能是:从顺序表的第i个位置开始,... (2)编写一个程序,其功能是:在一个非递减的顺序表中,删除所有值相等的多余元素,要求时间复杂度为O(n),空间复杂度为O(1)。

    知名公司数据结构笔试题及答案

    3.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 4.下面哪种排序法对12354最快 a quick sort b.buble sort c.merge sort 5.哪种结构,平均来讲,获取一个值最快 a. binary tree b. ...

    数据结构学习-教程与代码

    插入和删除元素的时间复杂度较高,为 O(n),但查找元素的时间复杂度为 O(1)。 链表(Linked List):由节点组成,每个节点包含一个值和指向下一个节点的指针。插入和删除元素的时间复杂度为 O(1),但查找元素的时间...

    Go 语言中实现SkipList实现跳表.pdf

    快速插入和删除:跳表支持快速的插入和删除,时间复杂度与链表类似,也是O(n)。 空间效率:跳表比平衡树等其他数据结构更加空间效率,因为它只需要维护每个节点的多个指针。 支持快速的查询:跳表可以快速的定位到...

    c语言数据结构实验:掌握线性表的链式存储结构 熟练掌握循环链表的存储特征和建立方法,掌握线性表的链式存储结构 下面是源码的txt

    要求算法的时间复杂度为 O(),空间复杂度为 O(1)。2、设计一算法,逆置带头结点的动态链表L。要求利用原表的结点空间,并要求用尽可能少的时间完成。 假设在长度大于1的单循环链表中,既无头结点也无头指针。s 为...

    Java单链表源码分析-interviews:采访

    O(1) 删除: O(1) 堆 Stack是元素的集合,有两个主要操作: push ,添加到集合中, pop删除最近添加的元素 后进先出数据结构(LIFO) 时间复杂度: 访问: O(n) 搜索: O(n) 插入: O(1) 删除: O(1) 队列 Queue是...

    C++数据结构与算法

    第1章 C++面向对象程序设计  1.1 抽象数据类型  1.2 封装  1.3 继承  1.4 指针  1.4.1 指针与数组  1.4.2 指针与复制构造函数  1.4.3 指针与析构函数  1.4.4 指针和引用变量  1.4.5 函数指针  1.5 多态性 ...

Global site tag (gtag.js) - Google Analytics