代码随想录算法训练营day3 | 链表 (1)

一、链表理论基础

        链表是一种通过指针串联在一起的线性结构,每个节点由两部分组成:数据域和指针域(指向下一个节点),最后一个节点的指针指向NULL(空指针)。                                                                                                                       --Carl

 链表性能分析:

 链表的Java定义:

public class ListNode {// 结点的值int val;// 下一个结点ListNode next;// 节点的构造函数(无参)public ListNode() {}// 节点的构造函数(有一个参数)public ListNode(int val) {this.val = val;}// 节点的构造函数(有两个参数)public ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}

二、LeetCode 203 移除链表元素

题目链接:203.移除链表元素icon-default.png?t=N7T8https://leetcode.cn/problems/remove-linked-list-elements/

思路:先移除符合条件的头结点,再设置虚拟头结点对之后的元素进行移除操作。

/*** 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 removeElements(ListNode head, int val) {//删除头结点while( head != null && head.val == val ){head = head.next;}ListNode index = head;//删除非头结点while(index != null && index.next != null){if(index.next.val == val){index.next = index.next.next;}else{index = index.next;}}return head;}
}

 三、LeetCode 707 设计链表

题目链接:707.设计链表icon-default.png?t=N7T8https://leetcode.cn/problems/design-linked-list/

思路:先考虑是否使用头结点,后创建链表节点类,再根据功能要求逐个实现。

//节点类
public class ListNode{int val;ListNode next;public ListNode(){}public ListNode(int val){this.val = val;}
}
class MyLinkedList {ListNode head;int length = -1;//无头结点链表public MyLinkedList() {head = null;length = 0;}public int get(int index) {//下标溢出if(index >= length){return -1;}ListNode temp = head;while(index > 0){index--;temp = temp.next;}return temp.val;}public void addAtHead(int val) {ListNode newNode = new ListNode(val);newNode.next = head;head = newNode;length++;}public void addAtTail(int val) {if(head == null){addAtHead(val);}else{ListNode temp = head;while(temp != null && temp.next != null){temp = temp.next;}ListNode newNode = new ListNode(val);temp.next = newNode;newNode.next = null;length++;}}public void addAtIndex(int index, int val) {if(index > length){return;}if(index == 0){addAtHead(val);return;}if(index == length){addAtTail(val);return;}ListNode newNode = new ListNode(val);ListNode temp = head;while(index > 1){temp = temp.next;index--;}newNode.next = temp.next;temp.next = newNode;length++;}public void deleteAtIndex(int index) {if(index < 0 || index >= length){return;}if(index == 0){head = head.next;length--;return;}ListNode temp = head;while(index > 1){temp = temp.next;index--;}temp.next = temp.next.next;length--;}
}

 刚写完出了很多小bug,没有一遍过,说明还是不够熟练,周末加练~

四、LeetCode 206 反转链表

题目链接:206.反转链表icon-default.png?t=N7T8https://leetcode.cn/problems/reverse-linked-list/

思路:翻转链表需要记录上一个节点的信息,考虑使用双指针,并设置temp指针暂存信息。

详见代码注释~

/*** 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 || head.next == null){return head;}ListNode now = head.next; //now存储当前节点ListNode cur = head;      //cur存储上一个节点cur.next = null;          //原头结点变尾节点while(now != null){ListNode temp = now.next;  //temp存储链表翻转前当前节点的下一个节点now.next = cur;            //当前节点的next指向上一个节点cur = now;                 //cur后移,now变cur,即本次循环的now为下次循环的curnow = temp;                //now后移}return cur;}
}

 五、今日小结

        题目难度逐渐上升,今天耗时较长;时间利用率还是不高,明天争取进一步提升效率~

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

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

相关文章

Servet的基础学习

Servet的基础学习 servet的简单介绍 Servlet 是运行在 Web 服务器或应用服务器上的程序&#xff0c;它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet&#xff0c;您可以收集来自网页表单的用户输入&#xff0…

《动手学深度学习(PyTorch版)》笔记4.5

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

【鸿蒙】大模型对话应用(一):大模型接口对接与调试

Demo介绍 本demo对接阿里云和百度的大模型API&#xff0c;实现一个简单的对话应用。 DecEco Studio版本&#xff1a;DevEco Studio 3.1.1 Release HarmonyOS API版本&#xff1a;API9 关键点&#xff1a;ArkTS、ArkUI、UIAbility、网络http请求、列表布局 官方接口文档 此…

【虚拟机数据恢复】异常断电导致虚拟机无法启动的数据恢复案例

虚拟机数据恢复环境&#xff1a; 某品牌R710服务器MD3200存储&#xff0c;上层是ESXI虚拟机和虚拟机文件&#xff0c;虚拟机中存放有SQL Server数据库。 虚拟机故障&#xff1a; 机房非正常断电导致虚拟机无法启动。服务器管理员检查后发现虚拟机配置文件丢失&#xff0c;所幸…

Emergent Abilities of Large Language Models 机翻mark

摘要 证明通过扩大语言模型可以可靠地提高性能和样本效率在广泛的下游任务。相反&#xff0c;本文讨论了我们称之为大型语言模型的新兴能力的一种不可预测的现象。我们认为如果一个能力不存在于较小的模型中&#xff0c;但在较大的模型中存在&#xff0c;则该能力就是新兴的。…

鸿蒙系统的APP开发

鸿蒙系统&#xff08;HarmonyOS&#xff09;是由华为公司开发的一款分布式操作系统。它被设计用于在各种设备上实现无缝的、统一的用户体验&#xff0c;包括智能手机、平板电脑、智能电视、智能穿戴等设备。鸿蒙系统的核心理念是支持多终端协同工作&#xff0c;使应用能够更灵活…

[UI5 常用控件] 03.Icon, Avatar,Image

文章目录 前言1. Icon2. Avatar2.1 displayShape2.2 initials2.3 backgroundColor2.4 Size2.5 fallbackIcon2.6 badgeIcon2.7 badgeValueState2.8 active 3. Image 前言 本章节记录常用控件Title,Link,Label。 其路径分别是&#xff1a; sap.m.Iconsap.m.Avatarsap.m.Image 1…

20240126请问在ubuntu20.04.6下让GTX1080显卡让whisper工作在large模式下?

20240126请问在ubuntu20.04.6下让GTX1080显卡让whisper工作在large模式下&#xff1f; 2024/1/26 21:19 问GTX1080模式使用large该如何配置呢&#xff1f; 这个问题没有完成&#xff0c;可能需要使用使用显存更大的显卡了&#xff01; 比如GTX1080Ti 11GB&#xff0c;更猛的可…

Typora 无法导出 pdf 问题的解决

目录 问题描述 解决困难 解决方法 问题描述 Windows 下&#xff0c;以前&#xff08;Windows 11&#xff09; Typora 可以顺利较快地由 .md 导出 .pdf 文件&#xff0c;此功能当然非常实用与重要。 然而&#xff0c;有一次电脑因故重装了系统&#xff08;刷机&#xff09;…

【C++】STL和vector容器

STL和vector容器 基本概念六大组件容器算法迭代器容器算法迭代器 vector容器基本概念vector构造函数赋值vector的容量和大小vector插入与删除vector存取数据函数原型 vector互换容器vector预留空间vector容器嵌套容器 基本概念 长久以来&#xff0c;软件届一直希望建立一种可重…

Facebook 广告帐户:多账号运营如何防止封号?

Facebook目前是全球最受欢迎的社交媒体平台之一&#xff0c;拥有超过27亿活跃用户。因此&#xff0c;它已成为个人和企业向全球受众宣传其产品和服务的重要平台。 然而&#xff0c;Facebook 制定了广告商必须遵守的严格政策和准则&#xff0c;以确保其广告的质量和相关性&…

七分钟交友匿名聊天室源码

多人在线聊天交友工具&#xff0c;无需注册即可畅所欲言&#xff01;你也可以放心讲述自己的故事&#xff0c;说出自己的秘密&#xff0c;因为谁也不知道对方是谁。 运行说明&#xff1a; 安装依赖项&#xff1a;npm install 启动&#xff1a;node app.js 运行&#xff1a;直接…