Go语言实现:【剑指offer】复杂链表的复制
2024-09-06 17:37:55
该题目来源于牛客网《剑指offer》专题。
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
Go语言实现:
type RandomListNode struct {
Val int
Next *RandomListNode
RandomNext *RandomListNode
}
func clone(head *RandomListNode) *RandomListNode {
if head == nil {
return nil
}
//从A开始
currentNode := head
//1.复制结点A得到A1,A1放到A后面
for currentNode != nil {
//先存一下,nextNode现在为B
nextNode := currentNode.Next
cloneNode := new(RandomListNode)
cloneNode.Val = currentNode.Val
cloneNode.Next = nextNode
currentNode.Next = cloneNode
//A处理完,处理B
currentNode = nextNode
}
//从A开始
currentNode = head
//2.复制Random,A到C,A1到C1
for currentNode != nil {
if currentNode.RandomNext == nil {
currentNode.Next.RandomNext = nil
} else {
currentNode.Next.RandomNext = currentNode.RandomNext.Next
}
//A处理完,处理B
currentNode = currentNode.Next.Next
}
//从A开始
currentNode = head
pCloneHead := head.Next
//3.拆分,ABC,A1B1C1
for currentNode != nil {
//A1
cloneNode := currentNode.Next
currentNode.Next = cloneNode.Next
if cloneNode.Next != nil {
cloneNode.Next = cloneNode.Next.Next
}
//A处理完,处理B
currentNode = currentNode.Next
}
return pCloneHead
}
最新文章
- iOS地图 -- 地理编码和反地理编码
- iOS自动化编译
- buaaoj230——next_permutation的应用
- Guidelines for clock
- careercup-数学与概率
- 采用python获得并修改文件编码(原创)
- char nvarchar varchar
- Liferay 6.1开发学习
- DMVsinSQLServer -- 备
- 显示标题栏中标题左侧的小图icon
- 读书笔记—CLR via C#委托和attribute
- tp框架知识 之(链接数据库和操作数据)
- 方格取数洛谷p1004
- mpvue——页面跳转
- 为什么打开fiddler电脑就不能上网,关了就能正常打开了呢?
- django linux环境部署
- MySQL的并发控制与加锁分析
- C# 8中的Async Streams
- U盘如何去除写保护
- Win10 安装 Anaconda3 用 Anaconda3 安装TensorFlow 1.2 (只支持python3.5)
热门文章
- VMware 完成 27 亿美元的 Pivotal 收购 | 云原生生态周报 Vol. 34
- Class 'org.apache.tomcat.jdbc.pool.DataSource' not found
- Spring(一)开篇
- axios中请求传值方式
- 常见基本数据结构——树,二叉树,二叉查找树,AVL树
- mysql安装忘记初始密码怎么办
- 从网上下载DLL
- leetcode 最大水池
- scrapy在存储数据到json文件中时,中文变成为\u开头的字符串的处理方法
- Spring MVC中的拦截器Interceptor