单链表--删除最大元素
发布日期:2021-11-02 05:00:17
浏览次数:2
分类:技术文章
本文共 1142 字,大约阅读时间需要 3 分钟。
设计一个算法,删除一个单链表L中元素值最大的节点(假设最大值节点是唯一的)
#include#include typedef struct LNode{ int data; struct LNode *next;}LinkNode; //单链表节点类型void CreatList(LinkNode *&L,int a[],int n);void Display(LinkNode *L);void delmaxnode(LinkNode *&L);int main(){ int a[] = {1,5,9,3,2,4}; LinkNode *L; CreatList(L,a,6); delmaxnode(L); Display(L);} void CreatList(LinkNode *&L,int a[],int n){ LinkNode *s,*r; //声明两个指针 L = (LinkNode *)malloc(sizeof(LinkNode)); //创建一个头结点 r = L; // r 始终指向尾节点,初始时指向头结点 for( int i = 0; i < n; i++) { s = (LinkNode *) malloc(sizeof(LinkNode)); s->data = a[i]; r->next = s; r = s; } r->next = NULL; } void Display(LinkNode *L){ LinkNode *p = L->next; //p指向第一个结点(不一定是头结点) while( p!= NULL) { printf("%d ",p->data); p = p->next; } printf("\n");}void delmaxnode(LinkNode *&L){ LinkNode *p=L->next,*pre=L,*maxp=p,*maxpre=pre; while (p!=NULL) { if (maxp->data data) //若找到一个更大的节点 { maxp=p; //更改maxp maxpre=pre; //更改maxpre } pre=p; //p、pre同步后移一个节点 p=p->next; } maxpre->next=maxp->next; //删除*maxp节点 free(maxp); //释放*maxp节点}
总结:找到最大元素,必须记录当前节点和前一个节点,,单链表想删除一个节点必须知道前一个节点。
转载地址:https://blog.csdn.net/weixin_43486985/article/details/97618903 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月04日 22时23分40秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【计算机操作系统】设备管理?磁盘结构是怎么样的?磁盘调度算法有哪些?
2019-04-26
【多线程高并发】为什么要使用多线程?创建多少个线程合适呢?
2019-04-26
【多线程与高并发】 Java两个线程轮流打印1-100两个数?多线程轮流打印数字?
2019-04-26
【多线程与高并发】 Java两个线程轮流打印字符串?
2019-04-26
【Linux命令篇】Linux命令实践
2019-04-26
【Leetcode单调队列】Leetcode239 滑动窗口最大值
2019-04-26
【Leetcode-单调栈】单调栈相关的题目-下一个更大的元素I 每日温度
2019-04-26
【Leetcode单调队列】- 洛谷P1714切蛋糕
2019-04-26
【Leetcode优先级队列】- 数据流的中位数
2019-04-26
【Leetcode优先级队列】-合并K个升序链表
2019-04-26
【多线程与高并发】-Java如何实现一个阻塞队列呢?
2019-04-26
【多线程高并发】-多线程实现数组的读与写
2019-04-26
【Java设计者模式】-Java实现订阅-发布者模式
2019-04-26
【计算机操作系统】-什么是系统调用呢?什么是用户态?什么是内核态?
2019-04-26
【计算机操作系统-进程管理】-进程通信是什么呢?
2019-04-26
Python程序元素分析
2019-04-26
TurtleArt美景图
2019-04-26