当前位置: 首页 > news >正文

【代码随想录】算法训练计划03

1、203. 移除链表元素

题目:
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
在这里插入图片描述

思路:
  • 移除链表元素,链表一定要注意虚拟头
  • 不要忘记不删除的时候要前移元素
  • 注意 cur 的赋值方式
  • 注意是初始化一个虚拟头节点,和声明分别开
// 代码一刷——虚拟头
func removeElements(head *ListNode, val int) *ListNode {dummy := &ListNode{}dummy.Next = head//cul.Next := head 这种写法错了cul := dummyfor cul.Next != nil {if cul.Next.Val == val {cul.Next = cul.Next.Next} else { // 不要忘记前移cul = cul.Next}}return dummy.Next
}

2、707. 设计链表

题目:
题目太长了就不复制了

思路:
  • 这题吧,主要两点
  • 1、注意条件说的是 index 是下标
  • 2、注意边界条件,-1 啥的
// 代码一刷
type SingleNode struct {Val intNext *SingleNode
}type MyLinkedList struct {dummyHead *SingleNodeSize int
}func Constructor() MyLinkedList {newNode := &SingleNode{-99,nil,}return MyLinkedList{dummyHead: newNode,Size: 0,}
}func (this *MyLinkedList) Get(index int) int {//获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 if this == nil || index < 0 || index >= this.Size {return -1}cur := this.dummyHead.Nextfor i:=0; i<index; i++ {cur = cur.Next}return cur.Val
}func (this *MyLinkedList) AddAtHead(val int)  {newNode := &SingleNode{Val:val}newNode.Next = this.dummyHead.Nextthis.dummyHead.Next = newNode//return this.Nextthis.Size++
}func (this *MyLinkedList) AddAtTail(val int)  {cur := this.dummyHeadfor cur.Next != nil {cur = cur.Next}newNode := &SingleNode{Val: val}cur.Next = newNodethis.Size++
}func (this *MyLinkedList) AddAtIndex(index int, val int)  {//if index < 0 {index = 0} else if index > this.Size {return}newNode := &SingleNode{Val:val}cur := this.dummyHeadfor i:=0; i<index; i++ {cur = cur.Next}newNode.Next = cur.Nextcur.Next = newNodethis.Size++
}func (this *MyLinkedList) DeleteAtIndex(index int)  {if index < 0 || index >= this.Size {return}cur := this.dummyHeadfor i:=0; i<index; i++ {cur = cur.Next}if cur.Next != nil {cur.Next = cur.Next.Next}this.Size--
}/*** Your MyLinkedList object will be instantiated and called as such:* obj := Constructor();* param_1 := obj.Get(index);* obj.AddAtHead(val);* obj.AddAtTail(val);* obj.AddAtIndex(index,val);* obj.DeleteAtIndex(index);*/

3、206. 反转链表

题目:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

思路:
  • 写老多遍了,这最少是第 7 遍,说说这次注意点吧
  • 1、注意声明两个变量,pre,cur
  • 2、注意 pre 声明,但是不初始化,因为不要 nil,看输入输出就知道了
// 代码一刷——只需要声明一个 pre 即可,不需要初始化
func reverseList(head *ListNode) *ListNode {var pre *ListNodecur := headfor cur != nil {next := cur.Nextcur.Next = prepre = curcur = next}return pre
}

相关文章:

  • 8.MySQL内外连接
  • 交换机基础(四):MSTP负载均衡配置案例
  • vue+golang上传微信头像
  • Codeforces Round 905 (Div. 3)ABCDEF
  • python+unittest+requests+HTMLRunner编写接口自动化测试集
  • RDMA概览
  • python版opencv人脸训练与人脸识别
  • LLM系列 | 22 : Code Llama实战(下篇):本地部署、量化及GPT-4对比
  • k8s部署kafka,并使用zookeeper做注册中心
  • cola架构:有限状态机(FSM)源码分析
  • 计算机网络——理论知识总结(上)
  • PlantSimulation访问本地Excel文件的方法
  • CAS 机制的实现原理分析
  • 【tio-websocket】9、服务配置与维护—TioConfig
  • Redis过期策略2020-架构师(六十三)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • AHK 中 = 和 == 等比较运算符的用法
  • Centos6.8 使用rpm安装mysql5.7
  • Lucene解析 - 基本概念
  • node-glob通配符
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • ------- 计算机网络基础
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用agvtool更改app version/build
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 小程序开发中的那些坑
  • ​​​​​​​​​​​​​​Γ函数
  • #define
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Lua:Lua调用C++生成的DLL库
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (转)jdk与jre的区别
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .gitignore文件—git忽略文件
  • .Net 路由处理厉害了
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net的DataSet直接与SQL2005交互
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @Autowired标签与 @Resource标签 的区别
  • @SuppressWarnings注解
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [.net]官方水晶报表的使用以演示下载
  • [20171102]视图v$session中process字段含义
  • [Android]Android开发入门之HelloWorld
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [Asp.net mvc]国际化
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [C++进阶篇]STL中vector的使用
  • [C语言]一维数组二维数组的大小
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [Java、Android面试]_10_Java中==与equal()方法的区别?重写equal()方法?