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

福田网站建设效果wordpress id重置

福田网站建设效果,wordpress id重置,黄骅做网站价格,asp网站乱码1. 题目描述 这题题意感觉说的不是很清楚,容易让人产生歧义!其实题意很简单,给你一个链表 head,你深拷贝它,然后返回即可,注意不能修改原链表 /* // Definition for a Node. class Node { public:int val;N…

1. 题目描述

这题题意感觉说的不是很清楚,容易让人产生歧义!其实题意很简单,给你一个链表 head,你深拷贝它,然后返回即可,注意不能修改原链表

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


2. 坑

首先,这题绝对没你看上去的那么简单,复制链表?太简单了,不就是链表的创建吗?
不!本题有一个有意思的地方,就是它有一个随机指针,随机指针以为着什么?
意味着,它指向的节点,可能还未创建!
因此说,我们不能直接遍历链表,来创建新链表,需要一些特殊方法



3. 思路1 – 哈希表

O ( N ) O(N) O(N)时间, O ( N ) O(N) O(N)空间

思路呢,也很简单,既然随机指针可能指向一个还未创建的节点,那么我们就先创建它,然后通过哈希表存起来,并与原链表的相应节点做映射。
这样,当我们下次遍历到这个随机节点时,我们可以检查一下哈希表,看看是否已经建立过了,避免重复创建节点。

代码

// 本题的难点主要在于,当我们需要将指针指向某个节点时
// 随机指针指向的节点可能还不存在
class Solution {
public:Node* copyRandomList(Node* head) {if(head == nullptr) return nullptr;Node *dummy = new Node(-1);Node *cur = dummy;// refto 存储的是,原链表head与它的拷贝之间的映射unordered_map<Node*, Node*> refto;while(head) { // 遍历原链表的每一个节点,创建它自己和他的random指针指向的节点// 并让它的random指针指向原链表random指针指向的节点if(refto[head] == nullptr) {Node *newNode = new Node(head->val);refto[head] = newNode;}if(head->random && refto[head->random] == nullptr) {Node *newNode = new Node(head->random->val);refto[head->random] = newNode;}refto[head]->random = refto[head->random];cur->next = refto[head];cur = refto[head];head = head->next;}return dummy->next;}
};


4. 思路2 – 原地修改

O ( N ) O(N) O(N) 时间, O ( 1 ) O(1) O(1)空间。

参考题解,最后的动图很易懂!
注意在计算空间复杂度时,是不考虑创建新链表产生的空间的,因为那是必须的,我们主要考虑的时额外空间的复杂度

大体思路,只要看了题解中的动图演示,基本就了解了,这里主要阐述一下流程:

  1. 遍历原链表,对于链表中的每个节点 n o d e node node,在它的后面新创建一个新节点 n e w N o d e newNode newNode并插入到链表当中,即 n o d e node node ➡️ n e w N o d e newNode newNode ➡️ n o d e node node-> n e x t next next,这个 n e w N o d e newNode newNode 就是对 n o d e node node 的深拷贝。(这一步就是核心所在,直接在原链表的基础上创建新链表,然后再把它分离出来,太妙了!!)
  2. 修改 n e w N o d e newNode newNode r a n d o m random random 指针。
  3. 创建新链表的头,修改 n e w N o d e newNode newNode n e x t next next

代码

class Solution {
public:Node* copyRandomList(Node* head) {if(head == nullptr) return nullptr;// 原地拷贝for(Node *node = head; node != nullptr; node = node->next->next) {Node *newNode = new Node(node->val);// node -> newNode -> node.nextnewNode->next = node->next;node->next = newNode;}// 修改random指针for(Node *node = head; node != nullptr; node = node->next->next) {Node *newNode = node->next;// 判断下randodm是否存在,存在的话,才有我们的copy// 注意要指向node->random->next而不是node->random// 因为node->random->next是我们自己创建的newNode->random = (node->random != nullptr) ? node->random->next : nullptr;}// 修改next指针以分离我们创建的链表Node *newHead = head->next;for(Node *node = head; node != nullptr; node = node->next) {Node *newNode = node->next;node->next = newNode->next; // 恢复原链表的next指针// 判断下一个节点是否存在,存在的话,才有我们的copynewNode->next = (newNode->next != nullptr) ? newNode->next->next : nullptr; // 修改我们创建的链表的指针}return newHead;}
};
http://www.dtcms.com/wzjs/556338.html

相关文章:

  • 专业网站建设联系传奇世界网页版平台
  • 福建福清市住房和建设局网站wordpress怎么删除目录下
  • xml天气预报网站怎么做百度学术论文查重官网
  • 怎么iis设置网站wordpress个性登录插件
  • 北京协会网站建设社交网站用户体验
  • 四川城乡住房和城乡建设厅网站首页代理公司网站备案
  • 网站代码在线优化项目总结
  • 通江移动网站建设各地残疾人联合会网站建设
  • 霸州建网站网上哪些网站可以做兼职
  • 网站建设网页与数据库连接让自己的网站收录
  • 怎么做网站访问被拒绝addthis wordpress
  • 陕西网站建设品牌公司推荐重庆网站建设设计公司
  • dede网站栏目管理如何建设售后服务网站建设
  • 西安做网站排名网站开发目的简介
  • 百度山西网站建设和百度推广服装定制图案
  • 网站首页模板下载下载百度app最新版
  • 丰台深圳网站建设公司移动互联网技术
  • 衡阳城乡建设局网站男子公众号下单做防水补漏
  • 昆明建设局官方网站合肥市建设局
  • 在南海建设工程交易中心网站宁波优化
  • html5手机网站特效国家企业信用公示信息系统(安徽)
  • 沧县住房和城乡建设局网站规范网络直播平台的可行性建议
  • 免费域名网站申请十大排行装修公司
  • 自学网站咨询公司的经营范围有哪些
  • 个人网站设计策划书一般做网站所使用的字体
  • 网站开发可能存在的困难咨询服务类网站建设
  • 网站抓取诊断建设工程施工合同实例
  • 做网站的基本要求学校网站建设财务报表
  • 做深度的互联网站wordpress the7 安装
  • 青岛建设银行网站首页做网站怎样让内容在小窗口打开