【代码随想录】链表

203. 移除链表元素

在这里插入图片描述

在这里插入图片描述

// public class ListNode {
//     int val;
//     ListNode next;
//     ListNode() {}
//     ListNode(int val) { this.val = val; }
//     ListNode(int val, ListNode next) { this.val = val; this.next = next;}
// }class Solution {public ListNode removeElements(ListNode head, int val) {// 在head之前创建一个虚拟节点ListNode preHead = new ListNode(0, head);ListNode current=preHead;while(current.next!=null){if(current.next.val == val){current.next=current.next.next;}else{current=current.next;}}return preHead.next;}
}

707.设计链表

在这里插入图片描述
在这里插入图片描述

class ListNode {int val;ListNode next;public ListNode(int val) {this.val = val;}
}class MyLinkedList {int size;ListNode head;public MyLinkedList() {this.size=0;this.head=new ListNode(0);//头节点之前的节点}public int get(int index) {if(index<0 || index>=this.size){return -1;}   ListNode current=this.head;for(int i=0;i<=index;i++){current=current.next;}return current.val;}public void addAtHead(int val) {addAtIndex(0, val);    }public void addAtTail(int val) {addAtIndex(this.size, val);}public void addAtIndex(int index, int val) {if(index<0 || index>this.size){return ;}ListNode node = new ListNode(val);ListNode current=this.head;for(int i=0;i<index;i++){current=current.next;//最终指向index的前一个节点}node.next=current.next;current.next=node;size++;//新增元素后不要忘记链表长度+1}public void deleteAtIndex(int index) {if(index<0 || index>=this.size){return ;}ListNode current=this.head;for(int i=0;i<index;i++){current=current.next;//最终指向index的前一个节点}current.next=current.next.next;size--;//删除元素后不要忘记链表长度-1}
}

206.反转链表

在这里插入图片描述
在这里插入图片描述

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {if(head==null){return null;}ListNode pre=new ListNode(0, head);//添加首节点ListNode current=head;while(current!=null){ListNode post=current.next;current.next=pre;pre=current;current=post;}head.next=null;//去掉首节点return pre;}
}

24. 两两交换链表中的节点

在这里插入图片描述
在这里插入图片描述

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode swapPairs(ListNode head) {if(head==null || head.next==null){return head;}ListNode prehead=new ListNode(0, head);ListNode node1=head;ListNode node2=node1.next;ListNode pre=prehead;while(node1!=null && node2!=null){ListNode post=node2.next;pre.next=node2;node2.next=node1;node1.next=post;pre=node1;node1=post;if(node1!=null){node2=node1.next;}           }// 不能直接返回head,因为head现在指向链表的第二个元素return prehead.next;}
}

19.删除链表的倒数第 N 个节点

在这里插入图片描述

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {// 把preHead当成第0个,head当成第1个ListNode preHead=new ListNode(0, head);int length=0;ListNode pointer=preHead;while(pointer.next!=null){length++;pointer=pointer.next;}pointer=preHead;for(int i=1;i<length-n+1;i++){pointer=pointer.next;//最终指向要删除节点的前一个节点}pointer.next=pointer.next.next;// head节点有可能被删除了return preHead.next;}
}

160.相交链表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {//存放链表A各节点的地址,目的是看链表B中是否有在set集合中的节点Set set = new HashSet();ListNode pointerA=headA;while(pointerA!=null){set.add(pointerA);pointerA=pointerA.next;}ListNode pointerB=headB;while(pointerB!=null && !set.contains(pointerB)){pointerB=pointerB.next;}//(1)在最后一个元素之后(null处)跳出循环//(2)在非空元素处跳出循环// if(pointerB==null){//     return null;// }else{//     pointerB;// }return pointerB;}
}

另一种解法:先遍历两个链表,得到它们的长度。然后,让长链表的指针先走它们长度差的步数,接着两个指针同时向前遍历,直到它们相遇或都为 null。

142.环形链表 II

在这里插入图片描述
在这里插入图片描述

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode detectCycle(ListNode head) {Set set=new HashSet();ListNode pointer=head;while(!set.contains(pointer) && pointer!=null){set.add(pointer);pointer=pointer.next;}//(1)链表有环:因走到已经走过的节点而退出循环//(2)链表无环:因走到链表末尾而退出循环return pointer;}
}

另一种解法:快慢指针

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

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

相关文章

Linux 安装系统可视化监控工具 Netdata

目录 About 监控工具 NetdataLinux 系统安装 Netdata关于 openEuler1、查看内核信息2、查看主机信息3、查看 dnf 包管理器的版本 Netdata 安装1、更新系统环境相关 rpm 包2、查看 netdata 包信息3、安装 netdata 包4、编辑 netdata.conf 配置5、启动 netdata 服务6、查看 netda…

TCP的十个重要的机制

注&#xff1a;TCP不是只有十个机制 TCP 可靠传输是tcp最为重要的核心&#xff08;初心&#xff09; 可靠传输&#xff0c;并不是发送方把数据能够100%的传输给接收方 而是退而求其次 让发送方发送出去数据之后&#xff0c;能够知道接收方是否收到数据。 一但发现对方没有…

FAS-Net

感想 图的下标弄不好&#xff0c;且作者未提供代码。AAAI的质量也就这样吧

基于Springboot + vue + mysql 游戏分享管理系统 (含源码)

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统架构 &#x1f4da; 系统架构设计 &#x1f4da; 数据库设计 &#x1f4ac; 管理员功能需求E/R图 &#x1f4ac; 用户功能需求E/R图 &#x1f4ac; 游戏文章E/R图 &#x1f4ac; 用户E/R图 &#x1f4da; 系…

注意,这类人无法在视频号开店!

我是王路飞。 视频号也可以开店铺去卖货了吗&#xff1f; 是的&#xff01;其实早在22年的时候&#xff0c;视频号就上线【小店】功能了&#xff0c;可以通过短视频、直播达人带货的形式&#xff0c;帮助商家转化商品。 当然了&#xff0c;视频号小店跟我一直在科普的抖音小…

U8二次开发-钉钉集成

钉钉开放平台作为企业沟通和协作的重要工具,其技术的每一次迭代都为企业带来了新的机遇和挑战。随着企业对于高效沟通和智能化管理的需求日益增长,钉钉平台的SDK更新显得尤为重要。把传统的U8与钉钉平台集成,可以有效的将业务功能和角色进行前移,打破应用系统二八原则,即8…

【C++初阶】第九站:vector的介绍及使用

前言&#xff1a; &#x1f3af;个人博客&#xff1a;Dream_Chaser &#x1f388;博客专栏&#xff1a;C &#x1f4da;本篇内容&#xff1a;vector的介绍及使用 ​ 目录 一、vector的介绍 二、vector的使用 1.vector的定义 2.vector iterator(迭代器)的使用 begin和end(…

ArcGIS操作(四)

任务&#xff1a; 根据江苏省夜间灯光影像完成数据处理与分析查阅统计年鉴数据以提取建成区空间分布位置完成建成区重心转移轨迹 步骤&#xff1a; 这里选取江苏省2000年、2004年、2008年夜光数据进行分析 加载影像 掩膜提取 投影 栅格转面 融合 栅格转面数据时分冗余&…

力扣刷题 二叉树遍历的统一迭代法

题干 给定一个二叉树的根节点 root &#xff0c;返回 它的 前中后序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root […

WebGL BabylonJS GUI 如何创建连接模型的按钮

如图所示&#xff1a; 方法&#xff1a; createGUI(mesh: BABYLON.Mesh, title: string, index: number) {const advancedTexture AdvancedDynamicTexture.CreateFullscreenUI(UI)const rect new Rectangle()rect.width 100pxrect.height 40pxrect.thickness 0advancedT…

101. 对称二叉树及同类题

101. 对称二叉树 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNo…

【python从入门到精通】-- 第四战:语句汇总

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…