1.4~1.5链表复习,代码操作(反转链表(用栈解决,双指针),删除链表指定元素),链表选择题,广义表

news2024/11/25 18:28:57

删除链表内指定范围的数

思路是双指针,定义两个指针,一个去找当前这个数满不满足要求,然后另一个定义为删除区间的起点 ,

当不满足时,两个指针同时向后移动;当满足时,前驱指针就不动了,不断的删掉当前的cur,直到为Nullptr或出了区间

node* del(int s, int e, node* head) {
    if (!head)return nullptr;
    node* pre = head, * cur = head->next;//pre表示区间起点,cur表示操作结点
    while (cur) {//只要不空就是还能操作
        if (cur->val <= s) {//当前的结点还不满足操作要求
            pre = cur;
            cur = cur->next;
        }//同时向后移动两个指针
        else {//满足一个要求
            if (cur->val < e) {//满足两个要求
                pre->next = cur->next;//删除掉当前的结点
                cur = cur->next;
            }
            else {
                break;
            }
        }
    }
}

反转链表

双指针

用一个指针,保存为当前遍历到的节点,再来一个指针为当前这个遍历到节点的前一个结点,

这个过程就相当于把链表拆成了两部分,一部分是已经反转好的链表,Pre为其头结点

另一部分为还未反转的原始链表,cur为其头结点,

算法的过程就是不断把未反转的链表的头结点转给反转的链表,让pre去接受

while(cur){//循环条件为,未反转的链表里还有元素,所以就是cur不为空,cur一旦为空就说明为反转的链表已经为空,就不用再反转了

node* temp=cur->next;//保存未反转链表的头结点

cur->next=pre;//把此时未反转链表的头结点接到反转链表上

pre=cur;//更新反转链表的头结点

cur=temp;//更新未反转链表的头结点

}

return pre;//最后返回反转链表的头结点pre

这个C不对,因为更新未排序链表以及已排序链表的顺序反了,应该先更新已倒序的,再更新未倒序的,否则就会导致下一个头结点直接被跳过 

用栈解决

由于栈可以先进先出,所以可以用栈去解决

import java.util.Stack;
public class Solution {
public ListNode ReverseList(ListNode head) {
    Stack<ListNode> stack= new Stack<>();
    //把链表节点全部摘掉放到栈中
    while (head != null) {
        stack.push(head);
        head = head.next;
    }
    if (stack.isEmpty())
        return null;
    ListNode node = stack.pop();
    ListNode dummy = node;
    //栈中的结点全部出栈,然后重新连成一个新的链表
    while (!stack.isEmpty()) {
        ListNode tempNode = stack.pop();
        node.next = tempNode;
        node = node.next;
    }
    //最后一个结点就是反转前的头结点,一定要让他的next
    //等于空,否则会构成环
    node.next = null;
    return dummy;
}
}

链表选择题

top指向栈的顶部,是空结点,然后让新插入的结点下一个指针指向它,

链栈的话,插入是要插入在头结点位置的,即TOP其实是相当于一个头结点的位置,往链栈里插元素,就是在往链表的第一个位置上放元素,所以是C的操作

就是说每个结点都会有两个链域,但是每个结点都会被一个链域唯一确定,除了根节点,所以一共2n个链域,有n-1是被用的,剩下n+1是没被用的

换个思路就是操场跑圈,相对速度为2,跑完一圈的步数为100/2=50 

A.单链表的没个节点都具有唯一的前驱节点和唯一的后继节点,所以当两个单链表存在相交的节点时,这两个链表则同时拥有这个节点,以及这个节点的所有后继节点,当这个公共节点是尾节点时,他们则只含有公共一个节点-------尾节点。 B.快慢指针是判断单链表是否有环的一种方法:两个指针,每次移动的步长为2叫做快指针,每次移动步长为1的指针叫做慢指针。快慢指针同时从头结点出发,当快指针率先到达NULL的时候,则说明此单链表中不存在环,当快指针追上慢指针的时候,说明此单链表中存在环。 C.有环的单向链表和无环的单向链表不能相交,因为当相交的时候,无环的单向链表也会被迫存在一个环,只不过这个环的”起点“可能不是原来单向链表的头结点。 4.两个单向链表之间相交可以存在环。 

两个。 一个每次走一步, 一次每次走两步, 会相遇就表示有环 

尾节点的后继指向头结点,而头结点不是尾节点的逻辑后继

注意是单链表而不是数组 

数组静态分配内存,链表动态分配内存; 数组在内存中连续,链表不连续; 数组元素在栈区,链表元素在堆区; 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n); 

数组对象是放在堆内存中,引用是放在栈内存中

考虑两个极端,最少是1,即头部,最坏是尾部,要N,中间是线性平均,所以为D 

在位置I上删除是N-I,即区间I到N,只含一个端点

在位置I上添加是N-I+1,区间两端点都要 

C除头结点外D考虑空表或只有一个元素

删除元素,删除元素的话需要知道前一个元素的指针;要在指定位置插入,就需要知道指定位置的指针,要删除的话,就是让删除位置的元素前一个元素的指针不再指向它,而是指向空指针或它后面的元素,越过他就行;插入的话就直接在指定位置接上要插入的元素即可

单链表与单循环链表b

b

只需要找到被接的链表的尾部,一个OM,然后接的链表,只要头结点即可 

队列

往队列的队尾插入一个元素为入队,从队列的排头删除一个元素称为退队。初始时 front=rear=0 , front 总是指向队头元素的前一位置,入队一次 rear+1 ,退队一次 front+1 。队列队头队尾指针相同时队列为空。而带链的队列,由于每个元素都包含一个指针域指向下一个元素,当带链队列为空时 front=rear=Null ,插入第 1 个元素时, rear+1 指向该元素, front+1 也指向该元素,插入第 2 个元素时 rear+1 , front 不变,删除 1 个元素时 front+1 。即 front=rear 不为空时带链的队列中只有一个元素。故本题答案为 A 选项。 

奇怪的选择题

报错

这个需要注意,vector删除后,后续下标会自动往前走,而i++,所以就会导致4被空掉 

广义表

head返回第一个元素,原子,tail返回去掉第一个元素后的表,相当于括号往里缩一个单位 

是广义表以及递归广义表的原理。 广义表是由n个元素组成的序列,n是广义表的长度。 广义表的深度: 广义表中括号的最大层数叫广义表的深度。 F=(a,F)的长度为2,由于属于递归表,所以深度为无穷,F相当于一个无限的表(a,(a,(a,(...))))。 

F的长度为2,第一个元素是原子,第二个元素是F自身。

F的深度为∞。F=(a,F)=(a,(a,(a,(…))))

对任意一个非空的广义表,其表头可能是单元素,也可能是广义表,而其表尾一定是广义表。注意表尾的深度(即括号的嵌套层数),表尾是由除了表头以外的其余元素组成的广义表,所以,需要在表尾的直接元素外面再加一层括号。
广义表最基本的操作:取表头head(LS)与取表尾tail(LS)

例:LS=(a,(b,c,d))
head(LS)=a
tail(LS)=((b,c,d))
head(tail(LS))=(b,c,d)
tail(tail(LS))=()
head(head(tail(LS)))=b
tail(head(tail(LS)))=(c,d)
head(tail(head(tail(LS))))=c
tail(tail(head(tail(LS))))=(d)
head(tail(tail(head(tail(LS)))))=d
tail(tail(tail(head(tail(LS)))))=()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1366407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

决策树--CART分类树

1、介绍 &#xff08;1&#xff09;简介 CART&#xff08;Classification and Regression Trees&#xff09;分类树是一种基于决策树的机器学习算法&#xff0c;用于解 决分类问题。它通过构建树状的决策规则来对数据进行分类。 &#xff08;2&#xff09;生成过程 ① 选择…

AR眼镜定制_ar智能眼镜5G硬件解决方案

AR眼镜近年来备受瞩目&#xff0c;其易于佩戴、轻巧耐用、功能强大、用途广泛的特点受到了广泛关注。 AR眼镜的应用场景非常广泛&#xff0c;不仅包括消费级市场&#xff0c;还涵盖了旅游、教育、工业、医疗等多个领域。新的工业AR穿戴技术以及工业级语音交互操作系统&#xff…

2020年认证杯SPSSPRO杯数学建模D题(第二阶段)让电脑桌面飞起来全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现&#xff1a; 对于一些必须每天使用电脑工作的白领来说&#xff0c;电脑桌面有着非常特殊的意义&#xff0c;通常一些频繁使用或者比较重要的图标会一直保留在桌面上&#xff0c;但是随着时间的推移&#xff0c;…

【css】快速实现鼠标悬浮变色效果

<div class"nav-item"><div class"ic-img"></div><div>切换</div> </div>.nav-item {width: 100rem;height: 45rem;line-height: 45rem;display: flex;text-align: center;justify-content: center;align-items: cent…

1.5PTA集练6-1~6-4,7-3,7-4(6/26)

6-1 顺序表的删除 分数 10 List Delete( List &L, ElementType minD, ElementType maxD ){int k0;for(int i0;i<L.last;i){if(L.Data[i]<maxD&&L.Data[i]>minD){L.Data[k]L.Data[i];}}L.lastk;return L; } 这个就是注意L需要是用.,而不是用->&#x…

lc 140. 单词拆分 II

回溯算法查询匹配单词 class Solution { public:unordered_map<string, int> word_map;void mapping(vector<string>& wordDict){for(auto &a : wordDict)word_map[a];}vector<string> ret;// s: 原始字符串// tmp: 已查询到的单词// …

免费的开源低代码平台推荐

1.JNPF 最后&#xff0c;推荐一个近期用的不错的低代码。 应用地址&#xff1a;https://www.jnpfsoft.com?csdn 开发语言&#xff1a;Java/.net 这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类&#xff0c;方便扩展&#xf…

如何使用静态IP代理解决Facebook多账号注册并进行网络推广业务?

在当今的数字时代&#xff0c;社交媒体成为了企业进行网络推广的一个重要途径&#xff0c;其中&#xff0c;Facebook是最受欢迎的社交媒体之一&#xff0c;因为它可以让企业通过创建广告和页面来推广他们的产品或服务。 但是&#xff0c;使用Facebook进行网络推广时&#xff0…

高级RAG(五):TruLens 评估-扩大和加速LLM应用程序评估

之前我们介绍了&#xff0c;RAGAs评估&#xff0c;今天我们再来介绍另外一款RAG的评估工具:TruLens , trulens是TruEra公司的一款开源软件工具&#xff0c;它可帮助您使用反馈功函数客观地评估基于 LLM 的应用程序的质量和有效性。反馈函数有助于以编程方式评估输入、输出和中间…

Google Earth Engine(GEE)深度学习入门教程- GEE导出篇

GEE导出篇 官方教程&#xff1a;TFRecord 和地球引擎 在GEE的JS Code Editor中&#xff0c;我们按照我们的需要去处理对应的遥感影像&#xff0c;得到处理后Image影像。为了导出后读取数据&#xff0c;在导出前一定清楚每个波段的名称&#xff08;不然没法读取&#xff09;。…

掌握Lazada API接口:开启电商开发新篇章,引领业务增长潮流

一、概述 Lazada API接口是Lazada平台提供的软件开发工具包&#xff0c;它允许第三方开发者通过编程方式访问Lazada平台上的商品、订单、用户等数据&#xff0c;并执行相关操作。通过使用Lazada API接口&#xff0c;开发者可以快速构建与Lazada平台集成的应用程序&#xff0c;…

三维轮廓测量仪:革命性技术在工业智能制造中的多重应用

现代工业智能制造领域中&#xff0c;三维轮廓测量仪是一项重要的测量技术。三维轮廓测量仪利用光学、激光或光电等技术手段&#xff0c;通过测量物体表面轮廓的三维坐标信息&#xff0c;能实现对物体形状、尺寸和表面特征的准确测量。它可以广泛应用于工业自动化、制造工艺控制…

CF1909_C. Heavy Intervals题解

CF1909_C. Heavy Intervals题解 题目传送门&#xff08;Problem - C - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1909/problem/C&#xff09;。 题目翻译如下&#xff1a;&#xff08;图片来源&a…

不带控制器打包exe,转pdf文件时失败的原因

加了注释的两条代码后&#xff0c;控制器会显示一个docx转pdf的进度条。这个进度条需要控制器的实现&#xff0c;如果转exe不带控制器的话&#xff0c;当点击转换为pdf的按钮就会导致程序出错和闪退。 __init__.py文件的入口

前端学习笔记 3:Vue 工程

前端学习笔记 3&#xff1a;Vue 工程 上一篇文章介绍了如何在单一 Html 页面中使用 Vue&#xff0c;本文介绍如何从头开始用 Vue 构建一个前端工程项目。 1.环境准备 Vue 框架代码的创建依赖于 Node.js&#xff0c;因此需要先安装 Node.js。 2.创建和启动 2.1.创建 通过以…

【Docker】可以将TA用于什么,简单了解下

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深…

阿里云2024年优惠券活动大全

阿里云作为中国领先的云计算服务提供商&#xff0c;一直致力于为用户提供优质、高效、安全、可靠的云计算服务。为了更好地回馈用户&#xff0c;阿里云会不定期地推出各种优惠券活动&#xff0c;让用户在享受云计算服务的同时&#xff0c;也能享受到更多的实惠。 1、阿里云云小…

流量超了不容小觑,做到这些完全不用担心

流量告急的小伙伴们总是会有这种烦恼&#xff0c;一不注意就用超了&#xff0c;话费蹭蹭的没了&#xff0c;尤其是到月底的时候&#xff0c;一不留神&#xff0c;套餐说超就超。今天小编就给大家总结几个办法&#xff0c;很有效的让小伙伴们再也不用被“流量突然用完”的恐慌支…

大甩卖——代码全家桶!!!

Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Python轴承故障诊断 (一)短时傅里叶变换STFT Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 pytorch-CSDN博客 Pytorch-…

Linux文件系统与日志分析

目录 一、Linux文件系统 1、inode与block 2、查看inode号码的命令 3、inode包含文件的元信息 4、Linux系统文件的三个主要时间属性 5、用户通过文件名打开文件时系统内部过程 6、inode的大小 7、inode的特点 二、日志 1、日志的功能 2、日志文件的分类 3、系统日志…