该题目来源于牛客网《剑指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
}

最新文章

  1. iOS地图 -- 地理编码和反地理编码
  2. iOS自动化编译
  3. buaaoj230——next_permutation的应用
  4. Guidelines for clock
  5. careercup-数学与概率
  6. 采用python获得并修改文件编码(原创)
  7. char nvarchar varchar
  8. Liferay 6.1开发学习
  9. DMVsinSQLServer -- 备
  10. 显示标题栏中标题左侧的小图icon
  11. 读书笔记—CLR via C#委托和attribute
  12. tp框架知识 之(链接数据库和操作数据)
  13. 方格取数洛谷p1004
  14. mpvue——页面跳转
  15. 为什么打开fiddler电脑就不能上网,关了就能正常打开了呢?
  16. django linux环境部署
  17. MySQL的并发控制与加锁分析
  18. C# 8中的Async Streams
  19. U盘如何去除写保护
  20. Win10 安装 Anaconda3 用 Anaconda3 安装TensorFlow 1.2 (只支持python3.5)

热门文章

  1. VMware 完成 27 亿美元的 Pivotal 收购 | 云原生生态周报 Vol. 34
  2. Class 'org.apache.tomcat.jdbc.pool.DataSource' not found
  3. Spring(一)开篇
  4. axios中请求传值方式
  5. 常见基本数据结构——树,二叉树,二叉查找树,AVL树
  6. mysql安装忘记初始密码怎么办
  7. 从网上下载DLL
  8. leetcode 最大水池
  9. scrapy在存储数据到json文件中时,中文变成为\u开头的字符串的处理方法
  10. Spring MVC中的拦截器Interceptor