html企业网站主页模板/怎么用手机创建网站
文章目录
- 总结
- 01 递归删除结点
- 02 删除结点
- 03 反向输出
- 04 删除最小值
- 05 逆置
- 06 链表递增排序
- 07 删除区间值
- 08 找公共结点
- 09 增序输出链表
- 10 拆分链表--尾插
- 11 拆分链表--头插
- 12 删除相同元素
- 13 合并链表
- 14 生成含有公共元素的链表C
- 15 求并集
- 16 判断子序列
- 17 判断循环链表是否对称
- 18 两个循环链表链接
- 19 找最小结点并删除
- 21 判断单链表是否有环
- 22 【2009真题】找倒数第k个元素
- 23 【2012真题】相同后缀找起始位置
- 24 【2015真题】删除绝对值相同
- 25 【2019真题】重新排列链表
总结
- 删除结点:1、2、4
- 就地逆置:5、
- 合并链表
- 分解链表:10、11、
- 去除重复元素:12、
- 并集:14、15
- 循环链表:17、18、19、20
- 头插法、尾插法重点基础必掌握。
- 判断是否有环:21
01 递归删除结点
用函数递归调用删除结点。
void deletex(linklist &L,int x){if(L==NULL) return;lnode *p;if(L->data==x){p=L;L=L->next;free(p);deletex(L,x);}else deletex(L->next,x);
}
02 删除结点
注意删除结点的时候可能断链。
void deletex2(linklist &L,int x){lnode *p=L->next,*pre=L,*q;while(p){if(p->data==x){q=p;p=p->next;pre->next=p;free(q);}else{pre=p;p=p->next;}}
}
03 反向输出
利用函数调用的特性反向输出。
void r_print(linklist L){if(L!=NULL){r_print(L->next);cout<<(L->data)<<" ";}else return;
}
void r_ignore_node(linklist L){if(L->next!=NULL){r_print(L->next);}
}
04 删除最小值
- 设置保留最小值的指针和其前驱
- 每次更新最小值
void delete_min(linklist L){lnode *p=L->next,*pre=L;lnode *minp=p,*minpre=pre;while(p){if(p->data<minp->data){minp=p;minpre=pre;}else{p=p->next;pre=pre->next;}}minpre->next=minp->next; //删除最小值结点free(minp);
}
05 逆置
很重要的基础:头插法
void head(linklist &L){lnode *p=L->next,*r;L->next=NULL;while(p){r=p->next; //记录下一结点p->next=L->next;L->next=p;p=r;}
}
06 链表递增排序
使用插入排序的思想,将头置空之后,扫描最小元素,然后使用尾插法插入头中。
void insert_sort(linklist &L){lnode *p=L->next,*r=p->next,*pre;p->next=NULL;p=r;while(p){r=p->next;pre=L;while(pre->next!=NULL&&pre->next->data<p->data){pre=pre->next;}p->next=pre->next;pre->next=p;p=r;}
}
07 删除区间值
见2题的删除代码,改下if语句即可。
void delete_x_m_n(linklist &L,int m, int n){lnode *p=L->next,*pre=L,*q;while(p){if(p->data<n&&p->data>m){q=p;p=p->next;pre->next=p;free(q);}else{pre=p;p=p->next;}}
}
08 找公共结点
linklist find_same_dot(linklist L1,linklist L2){linklist longlist, shortlist;int dist=0;int len1=length(L1),len2=length(L2);if(len1>len2){longlist=L1;shortlist=L2;dist=len1-len2;}else{longlist=L2;shortlist=L1;dist=len2-len1;}while(dist--) longlist=longlist->next;while(longlist){if(longlist->data==shortlist->data&&longlist->next->data==shortlist->next->data)return longlist;else{longlist=longlist->next;shortlist=shortlist->next;}}return NULL;
}
09 增序输出链表
见6题
void min_output(linklist L){while(L->next){lnode *pre=L,*p=L->next;lnode *minpre=pre, *minp=p;while(p){if(p->data<minp->data){minp=p;minpre=pre;}p=p->next;pre=pre->next;}cout<<minp->data<<" ";minpre->next=minp->next;free(minp);}
}
10 拆分链表–尾插
第一种方法是在A中直接删除。
linklist split_1_1(linklist &A){linklist B = (linklist)malloc(sizeof(lnode));B->next=NULL;lnode *p=A->next,*ra=A;lnode *rb=B,*q;while(p){//向后移一个ra=p;p=p->next;//从A中删除结点q=p;ra->next=p->next;p=p->next;//利用尾插法将结点插入B中rb->next=q;rb=rb->next;}ra->next=NULL;rb->next=NULL;return B;
}
第二种方法是把A的头拿下来,再选最小的排在A后。=尾插==
linklist split_1_2(linklist &A){linklist B = (linklist)malloc(sizeof(lnode));B->next=NULL;lnode *p=A->next,*ra=A;lnode *rb=B;//把表头摘下来A->next=NULL;while(p){//结点给Ara->next=p;ra=ra->next;p=p->next;//结点给Brb->next=p;rb=rb->next;p=p->next;}ra->next=NULL;rb->next=NULL;return B;
}
11 拆分链表–头插
第一种方法同上
linklist split_1_1(linklist &A){linklist B = (linklist)malloc(sizeof(lnode));B->next=NULL;lnode *p=A->next,*ra=A;lnode *rb=B,*q;while(p){//向后移一个ra=p;p=p->next;//从A中删除结点q=p;ra->next=p->next;p=p->next;//利用头插法将结点插入B中q=p->next;p->next=rb->next;rb->next=p;p=q;}ra->next=NULL;return B;
}
第二种方法同上
linklist split_2_1(linklist &A){linklist B = (linklist)malloc(sizeof(lnode));B->next=NULL;lnode *p=A->next,*ra=A;lnode *rb=B,*q;//把表头摘下来A->next=NULL;while(p){//结点给Ara->next=p;ra=ra->next;p=p->next;//结点给Bif(p){q=p->next;p->next=rb->next;rb->next=p;p=q;}}ra->next=NULL;//b是头插法所以最后指向是为NULLreturn B;
}
12 删除相同元素
简单代码,只不过要注意的p是要删除结点的前一个结点,判断的时候别判断错了。
void del_same(linklist &L){lnode *p=L->next,*q;if(p==NULL) return;while(p->next){q=p->next;if(p->data==q->data){p->next=q->next;free(q);}else{p=p->next;}}
}
13 合并链表
void merge(linklist &L1,linklist &L2)
{lnode *p1=L1->next,*p2=L2->next,*r;L1->next=NULL;while(p1&&p2){if(p1->data<=p2->data){r=p1->next;p1->next=L1->next;L1->next=p1;p1=r;}else{r=p2->next;p2->next=L1->next;L1->next=p2;p2=r;}}if(p1) p2=p1;while(p2){r=p2->next;p2->next=L1->next;L1->next=p2;p2=r;}free(L2);
}
14 生成含有公共元素的链表C
- 两个链表分别遍历,比较值头插入C中
linklist merge_same(linklist &A,linklist &B){lnode *p=A->next,*q=B->next;lnode *r,*s;linklist C = (linklist)malloc(sizeof(lnode));r=C;while(p&&q){if(p->data<q->data){p=p->next;}else if(p->data>q->data){q=q->next;}else{s=(lnode *)malloc(sizeof(lnode *));s->data=p->data;r->next=s;r=r->next;p=p->next;q=q->next;}}r->next=NULL;return C;
}
15 求并集
- 值不相同时分别删除A和B中的值
- 相同时删除B中的值
- 基础就是删除代码
void intersection(linklist &A,linklist &B){lnode *p=A->next,*q=B->next;lnode *r=A,*temp;while(p&&q){if(p->data<q->data){temp=p;p=p->next;free(temp);}else if(p->data>q->data){temp=q;q=q->next;free(temp);}else{//相等的时候保留A中相同元素r->next=p;r=r->next;p=p->next;//删除B中相同的元素temp=q;q=q->next;free(temp);}}while(p){temp=p;p=p->next;free(temp);}while(q){temp=q;q=q->next;free(temp);}r->next=NULL;
}
16 判断子序列
朴素kmp,也有所说bf的
bool simple_kmp(linklist &A,linklist &B){lnode *p=A->next,*q=B->next,*r=A->next;while(p&&q){if(p->data!=q->data){r=r->next;p=r;q=A->next;}else{p=p->next;q=q->next;}}if(q) return false;else return true;
}
17 判断循环链表是否对称
循环链表就方便了,能找前驱和后继,两个指针同时移动判断值即可。
bool symmetry(linklist L)
{lnode *p=L->next,*q=L->prior;while(p!=q&&q->next!=p){if(p->data==q->data){p=p->next;q=q->prior;}else return false;}return true;
}
18 两个循环链表链接
注意头尾即可
void add(linklist &h1,linklist &h2)
{lnode *p=h1->next,*q=h2->next;while(p->next!=h1){p=p->next;}while(q->next!=h2){q=q->next;}p->next=h2->next;//初始化的链表带头结点,若不带h2即可q->next=h1;
}
19 找最小结点并删除
- 遍历链表每次输出最小结点然后删除即可
相同代码见9题
void find_min(linklist &L){while(L->next!=L){lnode *pre=L,*p=L->next;lnode *minpre=pre, *minp=p;while(p!=L){if(p->data<minp->data){minp=p;minpre=pre;}p=p->next;pre=pre->next;}cout<<minp->data<<" ";minpre->next=minp->next;free(minp);}free(L);
}
21 判断单链表是否有环
- 两步走总能相遇,按照这个作为遇到的条件找相遇点和入环结点。
25题也是两步走。
lnode* findd(lnode *L)
{lnode *f=L,*s=L;while(s!=NULL&&f->next!=NULL){s=s->next;f=f->next->next;if(s->data==f->data) break; //可以直接设置指针,但是我初始化的有单链表为int a[15]={1,2,3,4,5,6,7,8,9,4,5,6,7,8,9};故用这种方法}if(s==NULL||f->next==NULL) return NULL;lnode *p=L,*q=s;while(p->data!=q->data){p=p->next;q=q->next;}return p;
}
22 【2009真题】找倒数第k个元素
- 相当于用长度为k的尺子比着找,最右端到尾部的时候,最左端就是倒数第k个元素。
int findk(linklist &L, int k){lnode *p=L,*q=L;int count=0;while(p){if(count<k) count++;else q=q->next;p=p->next;}if(count<k) return 0;else cout<<"kth to last position: "<<q->data;return 1;
}
23 【2012真题】相同后缀找起始位置
- 把尾部排齐:两个指针遍历链表,长度相同时找到相同时尾部对齐了
- 排齐之后遍历两个链表找第一个不相同的位置,该位置的下一个位置就是相同后缀的位置
typedef struct lnode{int data;struct lnode *next;
}lnode,*linklist;
lnode * find_addr(linklist str1, linklist str2){lnode *p,*q;int m=length(str1);int n=length(str1);for(p=str1;m>n;m--) p=p->next;for(q=str2;m<n;n--) q=q->next;while (p->next!=NULL&&q->next!=NULL){p=p->next;q=q->next;}return p->next;
}
24 【2015真题】删除绝对值相同
要求时间复杂度尽可能高➡️空间换时间
- 数组存查找状态:0表示绝对值未找到,1表示找到,第二次找到的同时删除该结点
- 注意动态分配数组的使用(静态数组试了试内存超出,不知道是不是这个问题)
void same(linklist &L,int n)
{lnode *p=L;int *q;q=(int *)malloc(sizeof(int)*(n+1));for(int i=0;i<n+1;i++) *(q+i)=0;int s;lnode *f;while(p->next!=NULL){s=abs(p->next->data);if(*(q+s)==0) {*(q+s)=1;p=p->next;}else{f=p->next;p->next=f->next;free(f);}}free(q);
}
25 【2019真题】重新排列链表
- 两步走找中间结点
- 逆置后边链表:使用头插法
- 看成两个链表进行插入
21也是两步走
void change(linklist &L){lnode *p,*q,*r,*s;p=q=L;while (q->next){p=p->next;q=q->next;if(q->next) q=q->next;}q=p->next; //p现在在中间结点p->next=NULL; //把后半段摘下来,逆置之后分别遍历两个链表插入指定位置while (q) //头插法实现原地逆置{r=q->next; //暂存后继结点q->next=p->next; //将q结点放在头结点p之后p->next=q;q=r;}s=L->next; //插入点q=p->next; //后半段数据点p->next=NULL; while(q){r=q->next;q->next=s->next;s->next=q;s=q->next;q=r;}
}
相关文章:

【考研复习】24王道数据结构课后习题代码|2.3线性表的链式表示
文章目录 总结01 递归删除结点02 删除结点03 反向输出04 删除最小值05 逆置06 链表递增排序07 删除区间值08 找公共结点09 增序输出链表10 拆分链表--尾插11 拆分链表--头插12 删除相同元素13 合并链表14 生成含有公共元素的链表C15 求并集16 判断子序列17 判断循环链表是否对称…...

娇滴滴的一朵花(Python实现)
目录 1 娇滴滴的她 2 Python代码实现 1 娇滴滴的她 娇滴滴。双眉敛破春山色。春山色。 为君含笑,为君愁蹙。多情别後无消息。 此时更有谁知得。谁知得。夜深无寐,度江横笛。 2 Python代码实现 import turtle from turtle import * turtle.title(春天送她一朵小花)…...

Android AccessibilityService研究
AccessibilityService流程分析 AccessibilityService开启方式AccessibilityService 开启原理 AccessibilityService开启方式 . 在Framework里直接添加对应用app 服务component。 loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,1); loadSetting(stmt, Settings.Se…...

华为OD机试(含B卷)真题2023 算法分类版,58道20个算法分类,如果距离机考时间不多了,就看这个吧,稳稳的
目录 一、数据结构1、线性表2、优先队列3、滑动窗口4、二叉树5、并查集6、栈 二、算法1、基础算法2、字符串3、图4、动态规划5、数学 三、漫画算法2:小灰的算法进阶参与方式 很多小伙伴问我,华为OD机试算法题太多了,知识点繁杂,如…...

JMeter命令行执行+生成HTML报告
1、为什么用命令行模式 使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死; 所以一般采用的方式是在GUI模式下调整测试脚本,再用命令行模式执行; 命令行方式支持在…...

学习Boost二:从附录3来看编码习惯
附录C 关键字浅谈 在C11标准中(C11.2.12)总共定义了73个关键字(keyword)、2个“准”关键字(identifiers with special meaning)和11个操作符替代字(alternative representation)[1]。…...

STM32基础入门学习笔记:核心板 电路原理与驱动编程
文章目录: 一:LED灯操作 1.LED灯的点亮和熄灭 延迟闪烁 main.c led.c led.h BitAction枚举 2.LED呼吸灯(灯的强弱交替变化) main.c delay.c 3.按键控制LED灯 key.h key.c main.c 二:FLASH读写程序(有…...

最后一次模拟考试题解
哦我想这不用看都知道是为了水任务 T1 黑白染色 其实这题有原 什么手写体 md (指 markdown) 分析 首先这题如果你题目没看错的话 ,会发现其实他是 n m n \times m nm 让你求 n n n \times n nn 的区域内的点(不会只有我一个人题目看错了罢 然后我们会发现…...

Mac 创建和删除 Automator 工作流程,设置 Terminal 快捷键
1. 创建 Automator 流程 本文以创建一个快捷键启动 Terminal 的自动操作为示例。 点击打开 自动操作; 点击 新建文稿 点击 快速操作 选择 运行 AppleScript 填入以下内容 保存名为 “Open Terminal” 打开 设置 > 键盘,选择 键盘快捷键 以此选择 服…...

2023华为OD机试真题B卷 Java 实现【最长的元音串】
前言 本题使用Java解答,如果需要Python代码,链接 题目 给定一个只由英文字母(a-z, A-Z)组成的字符串,找出其中最长的只包含元音字母(a, e, i, o, u, A, E, I, O, U)的子串,并返回其长度。如果不存在元音子串,则返回0。 输入: 一个由英文字母组成的字符串,长度大…...

网络防御之传输安全
1.什么是数据认证,有什么作用,有哪些实现的技术手段? 数据认证是一种权威的电子文档 作用:它能保证数据的完整性、可靠性、真实性 技术手段有数字签名、加密算法、哈希函数等 2.什么是身份认证,有什么作用,有哪些…...

【css】组合器
组合器是解释选择器之间关系的某种机制。在简单选择器器之间,可以包含一个组合器,从而实现简单选择器难以达到的效果。 CSS 中有四种组合器: 后代选择器 (空格):匹配属于指定元素后代的所有元素,示例:div …...

HTTPS、TLS加密传输
HTTPS、TLS加密传输 HTTPS、TLS加密传输1、HTTPS(HyperText Transfer Protocol Secure)2、TLS HTTPS、TLS加密传输 1、HTTPS(HyperText Transfer Protocol Secure) HTTPS(HyperText Transfer Protocol Secure&#x…...

docker frp 搭建 http + stcp 代理
所需服务器 2台 一台具有国外公网ip 一台具有国内 ip 内网外网都可以 外公网ip服务器配置如下 cat docker-compose.yamlversion: "2" services:frps:image: alpine:latesthostname: frpsrestart: alwayscontainer_name: frpsprivileged: trueuser: rootcommand: […...

项目出bug,找不到bug,如何拉回之前的版本
1.用gitee如何拉取代码 本文为转载于「闪耀太阳a」的原创文章原文链接:https://blog.csdn.net/Gufang617/article/details/119929145 怎么从gitee上拉取代码 1.首先找到gitee上想要拉取得代码URL地址 点击复制这里的https地址 1 ps:(另外一种方法&…...

vue-cli
vue-cli脚手架 案例一: 案例二: 案例三: 一、脚手架简介 Vue脚手架是Vue官方提供的标准化开发工具(开发平台),它提供命令行和UI界面,方便创建vue工程、配置第三方依赖、编译vue工程 1. …...

android获取屏幕分辨率的正确方法;获取到分辨率(垂直方向像素)的不正确
我通过下面的方法去获取屏幕分辨率的,但获取到的分辨率有时会不准确。原因是此方法有时候会忽略一些布局或控件的高度,从而得不到正确的高度。 public static String getDeviceResolution(Context context){//从系统服务中获取窗口管理器WindowManager w…...

机器学习笔记之优化算法(八)简单认识Wolfe Condition的收敛性证明
机器学习笔记之优化算法——简单认识Wolfe Condition收敛性证明 引言回顾: Wolfe \text{Wolfe} Wolfe准则准备工作推导条件介绍推导结论介绍 关于 Wolfe \text{Wolfe} Wolfe准则收敛性证明的推导过程 引言 上一节介绍了非精确搜索方法—— Wolfe \text{Wolfe} Wolf…...

通过win+r安装jupyter报错
通过pip install jupyter安装jupyter报错处理办法 1、python 更新到最新版,最好多执行几次后在安装jupyter python.exe -m pip install --upgrade pip 2、通过镜像安装 pip install jupyter --force-reinstall pip -i http://pypi.douban.com/simple/ --trusted-h…...

C#声明一个带返回值的委托
1、声明 public delegate string TestDel(string str); 2、使用 TestDel t; t (string str) > str; t (string str) > str "1"; t (string str) > str "2"; t (string str) > str "3"; Console.WriteLine(t ("hhhh&qu…...

Flutter 自定义view
带进度动画的圆环。没gif,效果大家自行脑补。 继承CustomPainter,paint()方法中拿到canvas,绘制API和android差不多。 import package:flutter/material.dart;class ProgressRingPainter extends CustomPainter {double strokeWidth 20;Col…...

Ubuntu新装系统报错:sudo: vim:找不到命令
问题: 新安装的老版本Ubuntu系统,发现在使用vim命令的时候报错: sudo:vim:找不到命令 解决办法 这是因为没有安装vim,直接运行下面命令安装vim sudo apt-get install vim...

Vue3自定义简单的Swiper滑动组件-触控板滑动鼠标滑动左右箭头滑动-demo
代码实现了一个基本的滑动功能,通过鼠标按下、鼠标松开和鼠标移动事件来监听滑动操作。 具体实现逻辑如下: 在 onMounted 钩子函数中,我们为滚动容器添加了三个事件监听器:mousedown 事件:当鼠标按下时,设置…...

三个主流数据库(Oracle、MySQL和SQL Server)的“单表造数
oracle 1.创建表 CREATE TABLE "YZH2_ORACLE" ("VARCHAR2_COLUMN" VARCHAR2(20) NOT NULL ENABLE,"NUMBER_COLUMN" NUMBER,"DATE_COLUMN" DATE,"CLOB_COLUMN" CLOB,"BLOB_COLUMN" BLOB,"BINARY_DOUBLE_COLU…...

TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读
导读: 前面章节,我们讲到过 接口(Interface)可以用于对「对象的形状(Shape)」进行描述。 本章节主要介绍接口的另一个用途,对类的一部分行为进行抽象。 类配合实现接口 实现(impleme…...

JavaWeb 手写Tomcat底层机制
目录 一、Tomcat底层整体架构 1.简介 : 2.分析图 : 3.基于Socket开发服务端的流程 : 4.打通服务器端和客户端的数据通道 : 二、多线程模型的实现 1.思路分析 : 2.处理HTTP请求 : 3.自定义Tomcat : 三、自定义Servlet规范 1. HTTP请求和响应 : 1 CyanServletRequest …...

Gof23设计模式之组合模式
1.定义 组合模式又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 2.结构 组合模式主要包含三种…...

龙芯积极研发二进制翻译,提升软硬件兼容性,提高LoongArch架构
根据8月8日Phoronix报道,龙芯正在积极研发龙芯二进制翻译功能(Loongson Binary Translationm,LBT)以提高LoongArch架构与其他处理器(如MIPS/x86/Arm)的二进制翻译能力,这重要举措将显著提升龙芯…...

3天爆肝整理,自动化测试-YAML文件读写实战(超细总结)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 YAML 简介 YAML&…...

算法通关村——透彻理解二分查找
1. 循环法 public static int binarySearch(int[] arr, int low, int high, int target) {while (low < high) {// 这样写主要是避免溢出的情况,以及>>优先级小于,避免出现死循环int mid low ((high - low) >> 1);if (arr[mid] target…...