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

广告联盟没有网站怎么做如何建立公司网站网页

广告联盟没有网站怎么做,如何建立公司网站网页,onethink做的企业网站,手机搭建电脑做的网站目录 题目描述 方法一、使用哈希表 方法二、不使用哈希表 题目描述 问题的关键是,random指针指向的是原链表的结点,这个原链表的结点对应哪一个新链表的结点呢?有两种办法。一是用哈希表。另一种是复制原链表的每一个结点,并将…

目录

题目描述

方法一、使用哈希表

方法二、不使用哈希表


题目描述

 

问题的关键是,random指针指向的是原链表的结点,这个原链表的结点对应哪一个新链表的结点呢?有两种办法。一是用哈希表。另一种是复制原链表的每一个结点,并将新结点接在原结点的后面组成一个长度加倍的链表,这样原结点的直接后继就是该原结点对应的新结点。

方法一、使用哈希表

unordered_map<Node*,Node*> new_table;//键是原链表中的旧结点,值是新链表中的新结点

unordered_map<Node*,Node*> random_table;//键是原链表中的旧结点,值是该旧结点的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 == nullptr)return nullptr;unordered_map<Node*,Node*> new_table;//键是原链表中的旧结点,值是新链表中的新结点unordered_map<Node*,Node*> random_table;//键是原链表中的旧结点,值是该旧结点的random指针指向的结点Node* newHead = nullptr;Node* newTail = nullptr;Node* cur = head;//第一步,建立新链表while(cur){Node* node = new Node(cur->val);new_table.insert({cur,node});random_table.insert({cur,cur->random});if(newHead == nullptr){newHead = node;newTail = node;}else{newTail->next = node;newTail = node;}cur = cur->next;}//第二步,设置新链表结点的random指针for(const auto& [old_node,new_node] : new_table){if(random_table[old_node]){new_node->random = new_table[random_table[old_node]];}}return newHead;}
};

实际上前面做法中的random_table是可以不需要的。

/*
// 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 == nullptr)return nullptr;unordered_map<Node*,Node*> new_table;//键是原链表中的旧结点,值是新链表中的新结点Node* newHead = nullptr;Node* newTail = nullptr;Node* cur = head;//第一步,建立新链表while(cur){Node* node = new Node(cur->val);new_table.insert({cur,node});if(newHead == nullptr){newHead = node;newTail = node;}else{newTail->next = node;newTail = node;}cur = cur->next;}cur = head;Node* new_cur = newHead;//第二步,设置新链表结点的random指针while(cur){if(cur->random){new_cur->random = new_table[cur->random];}cur = cur->next;new_cur = new_cur->next;}return newHead;}
};

方法二、不使用哈希表

第一步,复制每一个旧结点,并将新结点接在旧结点的后面组成新旧结点交替出现的长度翻倍的大链表。

第二步,设置新结点的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 == nullptr)return nullptr;Node* cur = head;//复制每一个旧结点,并将新结点接在旧结点的后面while(cur){Node* node = new Node(cur->val);Node* temp = cur->next;node->next = cur->next;cur->next = node;cur = temp;}cur = head;//设置新结点的random指针while(cur){if(cur->random)cur->next->random = cur->random->next;cur = cur->next->next;//原链表向前走一位}Node* new_head = nullptr;Node* new_tail = nullptr;cur = head;//提取出新结点组成新链表,并将原链表复原while(cur){if(new_head == nullptr){new_head = cur->next;new_tail = cur->next;}else{new_tail->next = cur->next;new_tail = cur->next;}cur->next = cur->next->next;//复原原链表cur = cur->next;//原链表向前走一步}return new_head;}
};
http://www.dtcms.com/wzjs/208759.html

相关文章:

  • 公司网站一年费用如何优化网络连接
  • 做淘宝主要看哪些网站搜索引擎排名优化方案
  • 贵阳好的网站建设网络工程师培训班要多少钱
  • 不用开源做网站百度客服电话人工服务热线
  • 做拍客哪个网站好百度推广代理公司广州
  • html5搭建网页游戏自己的网站怎么样推广优化
  • 想开广告图文店在哪学广州seo优化排名公司
  • 建设工程规范发布网站网络营销与直播电商
  • 洛阳制作网站公司吗济南优化哪家好
  • dw做网站时怎么改为绝对路径网站优化排名资源
  • 简述建设网站的具体步骤中国网评中国网评
  • 请兼职做企业网站设计怎么收费国外电商平台有哪些
  • 文化传媒网站建设武汉做网页推广公司
  • 好看企业官网源码淘宝关键词排名优化技巧
  • 太原百度推广开户seo的搜索排名影响因素有
  • 用别人的二级域名做网站seo都用在哪些网站
  • 做赚钱网站百度无锡营销中心
  • 什么是网络营销工程师整站seo
  • 独立站和公司网站的区别进一步优化营商环境
  • 网站流量监控怎么做营销型企业网站有哪些平台
  • php网站开发程序员大连网络营销seo
  • 制作图网 专业图片在线制作网站百度营销平台
  • 网站开发联系人国强百度搜索开放平台
  • 高度重视局门户网站建设百度广告电话号码
  • 网站 一般 用什么空间美工培训
  • pbootcms模板免费下载seo搜索是什么
  • 手机网站用什么软件做的自助建站系统开发
  • 中山做百度网站的公司名称百度关键词热度
  • 网站做好后网络营销课程培训课程
  • 护肤品网站建设需求分析广告公司名字