【无头双向链表和链表练习题2】

文章目录

  • 以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
  • 输入两个链表,找出它们的第一个公共结点。
  • 给定一个链表,判断链表中是否有环
  • 无头双向链表的模拟实现
  • ArrayList(顺序表)和LinkedList(双向链表)的区别
  • 总结


以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前

在这里插入图片描述

public class Partition {public ListNode partition(ListNode pHead, int x) {// write code here//创建四个节点ListNode bs = null;ListNode be = null;ListNode as = null;ListNode ae = null;ListNode cur = pHead; if(cur == null){return null;}while(cur != null){if(cur.val < x){//小于x放左边if(bs == null){//当bs里面没有节点时bs = cur;be = cur;     }else{//有节点了用be去遍历be.next = cur;be = cur;}}else{//大于x放右边if(as == null){//当as里面没有节点时as = cur;ae = cur;}else{//有节点了用ae去遍历ae.next = cur;ae = cur;}}cur = cur.next;}//cur遍历完了开始串起来//如果前面为空if(bs == null){return as;}//如果都不为空be.next = as;//如果后面不为空,要置为空if(as != null){ae.next = null;}return bs; 
}
}

输入两个链表,找出它们的第一个公共结点。

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB){ListNode cur1 = headA;ListNode cur2 = headB; int len1 =0;int len2 = 0;//1.求链表的长度while(cur1 != null){len1++;//5cur1 = cur1.next;}while(cur2 != null){len2++;//2cur2 = cur2.next;}cur1 = headA;cur2 = headB; //int len = math.abs(len1 - len2);//3//2.走差值步if(len1>len2){for(int i = 0;i < len1-len2;i++){cur1 = cur1.next;}}else{for(int j = 0;j < len2 - len1;j++){cur2 = cur2.next;}}//3.同时走while(cur1 != cur2 ){cur1 = cur1.next;cur2 = cur2.next;}//如果没相遇,都是空if(cur1 == null){return null;}return cur1;}
}

给定一个链表,判断链表中是否有环

        public class Solution {public boolean hasCycle(ListNode head) {ListNode fast = head;ListNode slow = head;while(fast != null && fast.next != null){fast = fast.next.next;//走两步slow = slow.next;//走一步if(fast == slow){return true;}}return false;}}

无头双向链表的模拟实现

public interface IList {// 2、无头双向链表实现//头插法void addFirst(int data);void addLast(int data);//任意位置插入,第一个数据节点为0号下标void addIndex(int index,int data);//查找是否包含关键字key是否在单链表当中boolean contains(int key);//删除第一次出现关键字为key的节点void remove(int key);//删除所有值为key的节点void removeAllKey(int key);//得到单链表的长度int size();void display();void clear();
}
public class MyLinkedList implements IList {//节点内部类static class ListNode{public int val;public ListNode next;public ListNode prev;public ListNode(int val){this.val = val;}}public ListNode head;public ListNode last;@Overridepublic void addFirst(int data) {//实例化一个节点ListNode node = new ListNode(data);if (head == null){head = node;last = node;}else{node.next = head;head.prev = node;head = node;}}//尾插法@Overridepublic void addLast(int data) {ListNode node = new ListNode(data);if (last == null){last = node;head = node;}else{last.next = node;node.prev = last;last = node;}}//让cur去到index位置private ListNode findIndex(int index){ListNode cur = this.head;//index-1while(index != 0){cur = cur.next;index--;}return cur;}//   插入节点@Overridepublic void addIndex(int index, int data) {ListNode node = new ListNode(data);//检查index是否合法if(index < 0 || index >size()){//抛出自定义异常System.out.println("index不合法");return;}//头插法if(index == 0){
//            node.next = head;
//            head.prev = node;
//            head = node;addFirst(data);return;}//尾插法if (index == size()){
//            last.next = node;
//            node.prev = last;
//            last = node;addLast(data);return;}ListNode cur = findIndex(index);node.next = cur;cur.prev.next = node;node.prev = cur.prev;cur.prev = node;}@Overridepublic boolean contains(int key) {ListNode cur = head;while(cur != null){if (cur.val == key){return true;}cur = cur.next;}return false;}@Overridepublic void remove(int key) {ListNode cur = head;while (cur != null) {//如果等于关键字进入循环if (cur.val == key) {//删除头if (cur == head) {//如果只有一个节点head = head.next;//head已经删了if (head != null){//如果有很多节点head.prev = null;}last = null;} else {//删中间节点和尾巴节点的共同代码cur.prev.next = cur.next;if (cur.next == null) {//删尾巴节点last = last.prev;} else {//删中间节点cur.next.prev = cur.prev;}}return;}else{//不等于,cur往后走cur = cur.next;}}}@Overridepublic void removeAllKey(int key) {ListNode cur = head;while (cur != null) {//如果等于关键字进入循环if (cur.val == key) {//删除头if (cur == head) {//如果只有一个节点head = head.next;//head已经删了if (head != null){//如果有很多节点head.prev = null;}last = null;} else {//删中间节点和尾巴节点的共同代码cur.prev.next = cur.next;if (cur.next == null) {//删尾巴节点last = last.prev;} else {//删中间节点cur.next.prev = cur.prev;}}}//继续往后遍历cur = cur.next;}}//求链表长度@Overridepublic int size() {ListNode cur = head;int count = 0;while(cur != null){count++;cur = cur.next;}return count;}//打印链表@Overridepublic void display() {ListNode cur = head;while(cur != null){System.out.print(cur.val +" ");cur = cur.next;}System.out.println();}@Overridepublic void clear() {head = null;last = null;}
}
public class TestLink {//遍历链表public static void main(String[] args) {LinkedList<Integer> list =new LinkedList<>();list.add(1);list.add(3);list.add(5);list.add(7);list.add(9);list.add(12);System.out.println(list);System.out.println("=================");for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+" ");}}
}

ArrayList(顺序表)和LinkedList(双向链表)的区别

在这里插入图片描述

总结

链表的学习就到这里,最重要的就是什么是链表,链表又细分为哪些链表,要会把链表画出来,链表和顺序表的区别,链表的各种方法的实现,链表的各种练习题等。

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

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

相关文章

矢量图片转换软件Vector Magic mac中文版功能特色

Vector Magic mac是一款图片转换矢量图&#xff0c;该软件使用世界上最好的全彩色自动描摹器&#xff0c;快速准备好您的作品进行打印、绣花、剪裁等操作。 Vector Magic mac功能特色 只需上传即可在线自动将 JPG、PNG、BMP 和 GIF 位图图像转换为真正的 SVG、Eps 和 PDF 矢量…

编程中的解密之路:挑战、创新与技术难题的探索

目录 引言 编程的重要性 编程中常见的技术难题 1. Bug追踪&#xff1a;寻找隐藏的恶魔 2. 性能优化&#xff1a;调校引擎的精准之道 3. 跨平台兼容性&#xff1a;寻找最佳的沟通方式 解决技术难题的方法 1. 使用调试工具和日志 2. 采用性能分析工具 3. 采用跨平台框架…

避免手机无节制使用

手机使用情况分析 使用时间 我挑选了11月份某一周的统计数据&#xff0c;可以看到&#xff0c;我的日均手机手机时间达到了惊人的8个小时&#xff0c;每周总共余约57小时。 按照使用软件的类型来分类&#xff0c;其中约%50用于娱乐&#xff0c;主要使用软件为&#xff1a;哔哩…

Django总结

文章目录 一、Web应用Web应用程序的优点Web应用程序的缺点应用程序有两种模式C/S、B/S C/S 客户端/服务端局域网连接其他电脑的MySQL数据库1.先用其他电脑再cmd命令行ping本机ip2.开放MySQL的访问 B/S 浏览器/服务端基于socket编写一个Web应用 二、Http协议1.http协议是什么2.h…

【蓝桥杯备考】第十二届蓝桥杯省赛Java B组真题 编程题

第十二届蓝桥杯省赛Java B组真题 编程题 1. 杨辉三角问题描述 2. 时间显示问题描述 3. 双向排序问题描述 4. 括号序列问题描述分析 5.砝码称重分析 1. 杨辉三角 问题描述 著名的杨辉三角形&#xff0c;按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到如下数…

【上海大学数字逻辑实验报告】一、基本门电路

一、 实验目的 熟悉TTL中、小规模集成电路的外形、管脚和使用方法&#xff1b;了解和掌握基本逻辑门电路的输入与输出之间的逻辑关系及使用规则。 二、 实验原理 实现基本逻辑运算和常用逻辑运算的单元电路称为逻辑门电路。门电路通常用高电平VH表示逻辑值“1”&#xff0c;…

为啥网络安全那么缺人,但很多人却找不到工作?

文章目录 一、学校的偏向于学术二、学的东西太基础三、不上班行不行 为什么网络安全的人才缺口那么大&#xff0c;但是大学毕业能找到网安工作的人却很少&#xff0c;就连招聘都没有其他岗位多&#xff1f; 明明央视都说了网络安全的人才缺口还有300多万&#xff0c;现在找不到…

Java远程连接本地开源分布式搜索引擎ElasticSearch

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar内网穿透工具实现Java远程连接操作本地Elasticsearch。 什么是elasticsearch&#xff1f;一个开源的分布式搜索引擎&#xff0…

Redux在React中的使用

Redux在React中的使用 1.构建方式 采用reduxjs/toolkitreact-redux的方式 安装方式 npm install reduxjs/toolkit react-redux2.使用 ①创建目录 创建store文件夹&#xff0c;然后创建index和对应的模块&#xff0c;如上图所示 ②编写counterStore.js 文章以counterStore…

JavaScript解构对象

之前介绍了数组解构&#xff0c;本文来介绍一下对象如何解构&#xff1b; 前言 现在我们有这样的一个数组&#xff1a; const restaurant {name: Classico Italiano,location: Via Angelo Tavanti 23, Firenze, Italy,categories: [Italian, Pizzeria, Vegetarian, Organic…

【论文阅读笔记】清单

我的论文清单 记录即将阅读的论文清单&#xff0c;持续更新。 未读论文 以下是我计划阅读但尚未开始的论文列表&#xff1a; 编号方向论文标题作者发表时间发表会议/期刊计划阅读日期code1NerfNeRFMeshing: Distilling Neural Radiance Fields into Geometrically-Accurate…

safari浏览器,直接安装ipa文件

蒲公英二维码方法 个人开发者账号发布证书AD-hoc 描述文件蒲公英上传链接通过苹果safari 浏览器下载IPA包 浏览器下载方法 前置条件 1.下载 ipa 包的设备的 uuid 已加入 苹果测试设备列表如何添加到测试列表 2.web 服务, 文件服务. 3.需要AD-hoc 描述文件 添加链接描述 1.创…

【shell】正则表达式和文本三剑客之grep和awk

目录 一、正则表达式 1.1用法 1.2表示字符匹配 1.3表示次数 1.4表示位置锚定 1.5表示分组或其他 1.6扩展正则表达式 二、grep命令 三、awk命令 3.1awk与vim的区别 3.2awk的语法 3.3基础用法 test1.提取磁盘的分区利用率 test2.提取用户名和uid号 test3.提取ip地址…

探究Kafka原理-5.Kafka设计原理和生产者原理解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

数据结构 / 内存的动态申请和释放

1.内存的动态申请 malloc malloc 的头文件: #include <stdlib.h>格式: void *malloc(size_t size);参数: size_t size: 申请堆区内存大小, 单位是字节&#xff1b;size_t: 是数据类型, 是 unsigned long的宏定义的别名;返回值: void *: 通用类型指针,使用时需要强转为具…

Linux基础项目开发1:量产工具——程序框架(一)

前言&#xff1a; 前面已经将Linux应用开发基础知识学习完了&#xff0c;现在让我们来做个小项目练练手&#xff0c;对之前的一些知识点进行一个更加具体详细的认识与了解&#xff0c;我们要进行的项目名称为&#xff1a;电子产品量产测试与烧写工具&#xff0c;这是一套软件&a…

YOLOv8改进 | SAConv可切换空洞卷积(附修改后的C2f+Bottleneck)

论文地址&#xff1a;官方论文地址 代码地址&#xff1a;官方代码地址 一、本文介绍 本文给大家带来的改进机制是可切换的空洞卷积&#xff08;Switchable Atrous Convolution, SAC&#xff09;是一种创新的卷积网络机制&#xff0c;专为增强物体检测和分割任务中的特征提取而…

五子棋游戏

import pygame #导入pygame模块 pygame.init()#初始化 screen pygame.display.set_mode((750,750))#设置游戏屏幕大小 running True#建立一个事件 while running:#事件运行for event in pygame.event.get():if event.type pygame.QUIT:#当点击事件后退出running False #事…

李峋同款爱心代码

李峋爱心代码 背景代码运行pycharm打包成exe程序 背景 最近大火的电视剧《点燃我温暖你》出现&#xff0c;令我的家庭地位进一步下降&#xff0c;因为男主“李峋”已经变成了她的大老公&#xff0c;而我就被打入冷宫. 为了满足她的“攀比心”&#xff0c;我连夜给她实现了粉红色…

【刷题笔记】数组-双指针||覆盖||重复元素

【刷题笔记】数组-双指针||覆盖||重复元素 目录 移除元素删除有序数组中的重复项删除有序数组中的重复项 II分析 移除元素 https://leetcode.cn/problems/remove-element/ 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并…