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

leetcode算法题--复杂链表的复制

原题链接:https://leetcode.cn/problems/fu-za-lian-biao-de-fu-zhi-lcof/description/?envType=study-plan-v2&envId=coding-interviews

感觉一开始想到的办法还是比较笨

/*** Definition for a Node.* type Node struct {*     Val int*     Next *Node*     Random *Node* }*/func copyRandomList(head *Node) *Node {if head == nil {return nil}res := &Node{}p1 := headp2 := resmp1 := make(map[*Node]int)mp22 := make(map[int]*Node)idx := 0for p1!= nil {p2.Val = p1.Valif p1.Next != nil {p2.Next = &Node{}}mp1[p1] = idxmp22[idx] = p2idx++p1 = p1.Nextp2 = p2.Next}p1 = headp2 = resfor p1 != nil {if p1.Random != nil {if idx, ok := mp1[p1.Random]; ok{p2.Random = mp22[idx] } }p1 = p1.Nextp2 = p2.Next}return res
}

用回溯方法做

/*** Definition for a Node.* type Node struct {*     Val int*     Next *Node*     Random *Node* }*/var cache = make(map[*Node]*Node)func copyRandomList(head *Node) *Node {return deepCopy(head)
}func deepCopy(head *Node) *Node {if head == nil {return nil}if node, ok := cache[head]; ok {return node }newNode := &Node{}newNode.Val = head.Valcache[head] = newNodenewNode.Next = deepCopy(head.Next)newNode.Random = deepCopy(head.Random)return newNode 
}

节点拆分法

/*** Definition for a Node.* type Node struct {*     Val int*     Next *Node*     Random *Node* }*/func copyRandomList(head *Node) *Node {if head == nil {return nil}for node := head; node != nil; node = node.Next.Next {newNode := &Node{Val: node.Val, Next: node.Next,}node.Next = newNode }for node := head; node != nil; node = node.Next.Next {if node.Random != nil {newNode := node.NextnewNode.Random = node.Random.Next }}res := head.Nextfor node := head; node != nil; node = node.Next {newNode := node.Nextnext := newNode.Nextnode.Next = nextif next != nil {newNext := next.NextnewNode.Next = newNext}}return res
}
http://www.lryc.cn/news/146144.html

相关文章:

  • C++面试题(叁)---操作系统篇
  • 算法笔记:KD树
  • plumelog介绍与应用-一个简单易用的java分布式日志系统
  • 百度网盘删除“我的应用数据”文件夹
  • 多店铺智能客服,助力店铺销量倍增
  • 会话跟踪技术
  • 递归算法学习——子集
  • 学习笔记:ROS使用经验(ROS报错)
  • 设计模式二十四:访问者模式(Visitor Pattern)
  • 使用gn+Ninja构建项目
  • VMware虚拟机连不上网络
  • 安防视频监控/视频集中存储/云存储平台EasyCVR平台无法取消共享通道该如何解决?
  • 算法通关村-----如何基于数组和链表实现栈
  • day-05 TCP半关闭 ----- DNS ----- 套接字的选项
  • 区块链金融项目怎么做?
  • Redis与数据库保持一致
  • idea中vue项目 npm安装插件后node modules中找不到
  • 已知两地经纬度,计算两地直线距离
  • 我想开通期权?如何开通期权账户?
  • ChatGPT对软件测试的影响
  • minion在ubuntu上的搭建步骤
  • Leetcode刷题笔记--Hot31-40
  • 【Python】环境配置,【Pytorch】GPU版本安装
  • BEVFusion复现 (Ubuntu RTX3090)
  • Python基础知识学习与回顾
  • SpringBoot笔记——(狂神说)——待续
  • Linux TCP编程流程
  • pyqt5 QuickStart
  • Qt6 for Windows 环境搭建(Visual Studio)
  • 探索未知世界:桌面端3D GIS引领地理信息新时代