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

【LeetCode】剑指 Offer(18)

目录

题目:剑指 Offer 35. 复杂链表的复制 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 35. 复杂链表的复制 - 力扣(Leetcode)

题目的接口:

/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node(int _val) {val = _val;next = NULL;random = NULL;}
};
*/
class Solution {
public:Node* copyRandomList(Node* head) {}
};

解题思路:

一开始先判断一下链表是否为空,

如果为空,直接返回空就行。

接下来是思路:

我的思路是通过原链表再复制一个链表:

 所以我们的第一步就是循环创建一个链表,

接在原链表上,如上图,

然后,

第二步是将原链表的random指针同样复制到新的链表上,

(改random的图我懒得画了,如果感兴趣可以自己画一画)

最后一步就是将新的链表独立出来,

再让原链表恢复,如下图:

 最后再返回新的链表的头结点即可。

代码如下:

代码:

/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node(int _val) {val = _val;next = NULL;random = NULL;}
};
*/
class Solution {
public:Node* copyRandomList(Node* head) {//判断链表是否为空if(!head){return nullptr;}//复制原链表Node* cur = head;while(cur){//new一个新节点,并初始化valNode* copy = new Node(cur->val);copy->next = cur->next;cur->next = copy;cur = copy->next;}//复制原链表的指针cur = head;while(cur){//如果randam是指向空指针就不用管(因为原本就是空)if(cur->random){cur->next->random = cur->random->next;}cur = cur->next->next;}//将原链表还原,将新链表独立出来Node* newhead = head->next;Node* prev = head;cur = newhead;while(cur->next){//还原原链表prev->next = prev->next->next;prev = prev->next;//独立新链表cur->next = cur->next->next;cur = cur->next;}//新链表的尾prev->next = nullptr;//返回新链表的头return newhead;}
};

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

http://www.lryc.cn/news/34183.html

相关文章:

  • Kubernetes节点运行时从Docker切换到Containerd
  • 【编程基础之Python】12、Python中的语句
  • android h5餐饮管理系统myeclipse开发mysql数据库编程服务端java计算机程序设计
  • 容易混淆的嵌入式(Embedded)术语
  • Nodejs 中 JSON 和 YAML 互相转换
  • C++入门教程||C++ 修饰符类型||C++ 存储类
  • Android开发面试:Java知识答案精解
  • Windows上一款特别好用的画图软件
  • html--学习
  • 关于递归处理,应该怎么处理,思路是什么?
  • 重磅!牛客笔试客户端可防ChatGPT作弊
  • 春季训练营 | 前端+验证直通车-全实操项目实践,履历加成就业无忧
  • 2.详解URL
  • Android特别的数据结构(二)ArrayMap源码解析
  • 减少if else
  • 硕士毕业论文常见的排版小技巧
  • JAVA开发(数据类型String和HasMap的实现原理)
  • Hbase 映射到Hive
  • 14_MySQL视图
  • 做程序界中的死神,斩魂刀始解
  • 顺序表——“数据结构与算法”
  • 嵌入式Linux从入门到精通之第十六节:U-boot分析
  • UART 串口通信
  • 【硬件】P沟道和N沟道MOS管开关电路设计
  • 中移杭研一面经历
  • 如何成为一名全栈工程师:专业建议与技能要求
  • MySQL架构篇
  • Redhat7.6安装weblogic10.3.6(超详细,有图文)
  • dashboard疏散主机提示报错:无法疏散主机...处理方法、openstack虚拟机状态卡在重启处理方法、openstack在数据库修改虚拟机状态的方法
  • 力扣:轮转数组(详解)