首页 > 其他分享 >Leecode知识点

Leecode知识点

时间:2024-02-23 20:55:33浏览次数:24  
标签:知识点 ListNode len Leecode func return data 节点

创建结构体指针:

  var list *ListNode = &ListNode(0,head)

  上面的写法等同于 list :=  &ListNode(0,head)

  要想创建一个链表,首先要创建一个表头

  num := new(ListNode)   然后将其进行数据赋值以及链接到下一个   middle := num  //这里对middle进行修改之后,本身的链表也会被修改,所以要保留头链表的链接     for i:=0;i<5;i++{           middle.Next = &ListNode{Data: i}           middle = middle.Next     } 我们要对链表进行删除操作时:   首先我们要复制它的头节点,然后再对复制之后的进行复制,以便进行操作      p:=&ListNode{0,head}      current:=p      for i:=0;i<length-n;i++{           current = current.Next       }      current.Next = current.Next.Next 在实现栈操作的时候,可以通过[]byte来实现   stack := []byte{} 真要实现栈操作的时候 //实现栈 type Stack struct{     data []interface{} } //栈的长度 func (s *Stack) Len() int{     return len(s.data) } //获取栈顶元素 func (s *Stack) Peek() interface{}{     return s.data[len(s.data)-1] } //压入一个数据 func (s *Stack) Push(element interface{}){     s.data = append(s.data, element) } //移除栈顶元素 func (s *Stack) Pop() interface{}{     if len(s.data) == 0{         return nil     }     res := s.data[len(s.data)-1]     s.data = s.data[:len(s.data)-1]     return res }     关于最小堆的初始化(依据Leecode修改)

func mergeKLists(lists []*ListNode) *ListNode {
h := hp{}
for _, head := range lists {
if head != nil {
h = append(h, head)
}
}
heap.Init(&h) // 堆化(有了下面的方法函数这个方法才能使用)

dummy := &ListNode{} // 哨兵节点,作为合并后链表头节点的前一个节点
cur := dummy
for len(h) > 0 { // 循环直到堆为空
node := heap.Pop(&h).(*ListNode) // 剩余节点中的最小节点
if node.Next != nil { // 下一个节点不为空
heap.Push(&h, node.Next) // 下一个节点有可能是最小节点,入堆
}
cur.Next = node // 合并到新链表中
cur = cur.Next // 准备合并下一个节点
}
return dummy.Next // 哨兵节点的下一个节点就是新链表的头节点
}

type hp []*ListNode
func (h hp) Len() int { return len(h) }
func (h hp) Less(i, j int) bool { return h[i].Val < h[j].Val } // 最小堆
func (h hp) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *hp) Push(v any) { *h = append(*h, v.(*ListNode)) }
func (h *hp) Pop() any { a := *h; v := a[len(a)-1]; *h = a[:len(a)-1]; return v }

标签:知识点,ListNode,len,Leecode,func,return,data,节点
From: https://www.cnblogs.com/guanyifan/p/18030239

相关文章

  • (笔记)Linux基础知识点总结
     一、从认识操作系统开始 1、操作系统简单分类Windows​目前最流行的个人桌面操作系统,不做多的介绍,大家都清楚。界面简单易操作,软件生态非常好。Unix​最早的多用户、多任务操作系统。后面崛起的Linux在很多方面都参考了Unix。目前这款操作系统已......
  • html四边形的的框怎么编写,html知识点之利用css四边形切角并且加上边框
    前言这几个月做了很多前端工作,其中一个需求还是蛮头疼,UI给的图上面的四边形是一个带斜边的,直接用背景图可以实现,但是会出现各种布局的问题,比如内容太大了,边框不会跟着扩大,废话不多说,这里写一些如何利用css话四边形带有斜边,并且给斜边加边框,在这之前,先简单说一下需要用到的函数li......
  • 【Vue前端】vue使用笔记0基础到高手第2篇:Vue进阶知识点介绍(附代码,已分享)
    本系列文章md笔记(已分享)主要讨论vue相关知识。Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和关注程度在三大框架中稍微胜出,并且它的热度还在递增。Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。Vue.js是一个构建数据驱动......
  • 想设计一个高并发的消息中间件前,先熟悉一下这些知识点
    本文分享自华为云社区《面试必问|如何设计一款高并发的消息中间件?》,作者:冰河。消息中间件涉及的知识点要想设计一个具有高并发的消息中间件,那么首先就要了解下消息中间件涉及哪些具体的知识点。通常,设计一个良好的消息中间件最少需要满足如下条件:生产者、消费者模型。支持......
  • 《程序是怎样跑起来的》第四五章知识点
    《让程序跑起来》第四五章知识点第四章:程序的内存管理内存的基本概念:介绍计算机内存的基本结构,包括RAM(随机存取存储器)的工作原理,以及内存与CPU之间的交互方式。程序的加载与执行:解释操作系统如何将程序从磁盘加载到内存中,以及CPU如何执行内存中的指令。堆与栈:介绍程序运行时的......
  • 《程序是怎样跑起来的》第六七章知识点
    第六章:程序的优化与调试性能优化:讨论如何优化程序的性能,包括减少不必要的计算、使用更高效的算法、优化数据结构等。代码调试:介绍常见的代码调试技术,如使用调试器(debugger)来跟踪程序的执行过程、设置断点、查看变量值等。错误处理与异常捕获:讲解如何编写健壮的代码,包括错误处理......
  • flutter 知识点
    前沿熟悉了下flutter,然后把一些知识点梳理下,便于记忆:其实很多布局样式和CSS差异并不大,我的理解flutter的写法就是HTML写在标签上的style,也就是内敛样式,这样好理解,你也可以有不同的看法, 完成了之前没有完成的flutterdemo哈哈哈,OK 常用的布局和用到的组件:其他可以去......
  • 前端知识点学习汇总,温故而知新
    前端知识点学习汇总,温故而知新1.CSS行内样式表:权重高,div2.内部样式表,写在headerstyle里:结构+样式选择器{属性1:属性值1;属性2:属性值2}3.外部样式表:style.css,将结构和样式分开<head><linkrel="stylesheet"href="css/style.css"></head>样式表优点缺点控制范......
  • 【驾驶知识】科目一、科目四知识点总结大全!!!
    前言:驾考宝典知识点整理、科目一总结、科目四总结、驾照科知识点总结。科目一和科目四的主要知识点,自己在准备时整理的笔记,仅供参考,希望大家都能顺利通关~原文持续更新中:https://www.cnblogs.com/MrFlySand/p/18010913戳下方链接,后台回复【230813驾照】获取更多驾考知识http......
  • 复杂系统 | 考前知识点总结(不完全)
    这份知识点总结(cheatsheet)是基于21年入学直博的师兄的押题(因为我没太听课......