当前位置:首页 > 经验 >

查找单链表中最大节点(单链表寻找值最大的结点)

来源:原点资讯(www.yd166.com)时间:2022-11-04 00:12:13作者:YD166手机阅读>>

头插法生成的链表中,结点的次序和输入数据的顺序不一致。若希望两者次序一致,则需要尾插法。

该方法是将新结点逐个插入到当前链表的表尾上,为此必须增加一个尾指针r, 使其始终指向当前链表的尾结点,代码如下:

//尾插法建立单链表 LinkedListLinkedListCreatT(){ Node*L; L=(Node*)malloc(sizeof(Node));//申请头结点空间 L->next=NULL;//初始化一个空链表 Node*r; r=L;//r始终指向终端结点,开始时指向头结点 intx;//x为链表数据域中的数据 while(scanf("%d",&x)!=EOF){ Node*p; p=(Node*)malloc(sizeof(Node));//申请新的结点 p->data=x;//结点数据域赋值 r->next=p;//将结点插入到表头L-->|1|-->|2|-->NULL r=p; } r->next=NULL; returnL; } 遍历单链表如打印、修改

从链表的头开始,逐步向后进行每一个元素的访问,称为遍历。

对于遍历操作,我们可以衍生出很多常用的数据操作,比如查询元素,修改元素,获取元素个数,打印整个链表数据等等。

进行遍历的思路极其简单,只需要建立一个指向链表L的结点,然后沿着链表L逐个向后搜索即可,代码如下:

//便利输出单链表 voidprintList(LinkedListL){ Node*p=L->next; inti=0; while(p){ printf("第%d个元素的值为:%d\n", i,p->data); p=p->next; } }

对于元素修改操作,以下是代码实现:

//链表内容的修改,在链表中修改值为x的元素变为为k。 LinkedListLinkedListReplace(LinkedListL,intx,intk){ Node*p=L->next; inti=0; while(p){ if(p->data==x){ p->data=k; } p=p->next; } returnL; }

简单的遍历设计的函数只需要void无参即可,而当涉及到元素操作时,可以设计一个LinkedList类型的函数,使其返回一个操作后的新链表。

插入操作

链表的插入操作主要分为查找到第i个位置,将该位置的next指针修改为指向我们新插入的结点,而新插入的结点next指针指向我们i 1个位置的结点。

其操作方式可以设置一个前驱结点,利用循环找到第i个位置,再进行插入。

如图,在DATA1和DATA2数据结点之中插入一个NEW_DATA数据结点:

从原来的链表状态

查找单链表中最大节点,单链表寻找值最大的结点(9)

到新的链表状态:

查找单链表中最大节点,单链表寻找值最大的结点(10)

代码实现如下:

//单链表的插入,在链表的第i个位置插入x的元素 LinkedListLinkedListInsert(LinkedListL,inti,intx){ Node*pre;//pre为前驱结点 pre=L; inttempi=0; for(tempi=1;tempi<i;tempi ){ pre=pre->next;//查找第i个位置的前驱结点 } Node*p;//插入的结点为p p=(Node*)malloc(sizeof(Node)); p->data=x; p->next=pre->next; pre->next=p; returnL; } 删除操作

删除元素要建立一个前驱结点和一个当前结点,当找到了我们需要删除的数据时,直接使用前驱结点跳过要删除的结点指向要删除结点的后一个结点,再将原有的结点通过free函数释放掉。如图所示:

查找单链表中最大节点,单链表寻找值最大的结点(11)

代码如下:

//单链表的删除,在链表中删除值为x的元素 LinkedListLinkedListDelete(LinkedListL,intx){ Node *p,*pre;//pre为前驱结点,p为查找的结点。 p=L->next; while(p->data!=x){//查找值为x的元素 pre=p; p=p->next; } pre->next = p->next;//删除操作,将其前驱next指向其后继。 free(p); returnL; } 双向链表双向链表的简介以及概念

单链表是指结点中只有一个指向其后继的指针,具有单向性,但是有时需要搜索大量数据的时候,就需要多次进行从头开始的遍历,这样的搜索就不是很高效了。

在单链表的基础上,对于每一个结点设计一个前驱结点,前驱结点与前一个结点相互连接,构成一个链表,就产生了双向链表的概念了。

双向链表可以简称为双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。

查找单链表中最大节点,单链表寻找值最大的结点(12)

栏目热文

在单链表中查找值为x的节点(单链表指针怎么指向上一节点)

在单链表中查找值为x的节点(单链表指针怎么指向上一节点)

通过编码实现日常关于链表可能会遇到到编程题1 两个链表是各自自增的,要求合拼之后的链表满足单调不递减/** * 两个递...

2022-11-04 00:44:00查看全文 >>

大学教授可以开公司吗(国家允许院士开办公司吗)

大学教授可以开公司吗(国家允许院士开办公司吗)

新加坡南洋理工大学全职教授、物理学领域全球前1%高被引科学家、担任过多场国际重要学术会议的主席、领导的课题组实现了世界上...

2022-11-04 00:26:47查看全文 >>

老谭搞机靠谱吗(现在的搞机视频)

老谭搞机靠谱吗(现在的搞机视频)

“环线是不是降速了,好慢。”“环线现在成了观光线路了迈(吗),感觉速度还不如我骑自行车快……”这几天,不少乘坐轨道交通环...

2022-11-04 00:25:37查看全文 >>

机贩子靠谱吗(手机贩子太可怕了)

机贩子靠谱吗(手机贩子太可怕了)

其实很早的时候数码盖饭就给大家科普了“BS资源机”,他有很多名字:资源机、富士康机、1978机、BS机,这类机器是苹果全...

2022-11-04 00:29:11查看全文 >>

华强北告诉你搞靓机靠不靠谱(二手手机哪里买最靠谱)

华强北告诉你搞靓机靠不靠谱(二手手机哪里买最靠谱)

内容来自:酷安@最北的北方啥是“背包客”?背包客,顾名思义,背包,他们就是华强北的代购,因为各位小伙伴并不能都来深圳买手...

2022-11-04 00:42:44查看全文 >>

在单链表中查找一个节点如何操作(查找链表是否存在一个节点)

在单链表中查找一个节点如何操作(查找链表是否存在一个节点)

单链表的定义链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。线性表...

2022-11-04 00:24:09查看全文 >>

单链表查找结点流程图(在单链表中查找一个节点如何操作)

单链表查找结点流程图(在单链表中查找一个节点如何操作)

单链表单链表的创建分为头插入法和尾插入法两种,两者并无本质上的不同,都是利用指针指向下一个结点元素的方式进行逐个创建,只...

2022-11-04 00:31:59查看全文 >>

单链表找中间的节点(在链表中查找节点)

单链表找中间的节点(在链表中查找节点)

想法:返回单链表的中间节点:采用双指针方法,慢指针走一步,快指针走2步,当快指针走到头,那么慢指针所在的位置就是链表的中...

2022-11-04 00:29:10查看全文 >>

单链表各个节点的关系(单链表的中间节点)

单链表各个节点的关系(单链表的中间节点)

一:相关概念(1)什么是链表官方定义:链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接...

2022-11-04 00:27:00查看全文 >>

怎么找单链表节点(如何确认链表节点)

怎么找单链表节点(如何确认链表节点)

福哥答案2020-11-03:1.输入链表头节点,奇数长度返回中点,偶数长度返回上中点 。1.1.快慢指针。1.2.单指...

2022-11-04 00:41:37查看全文 >>

文档排行