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

做b2b网站赚钱深圳优化公司

做b2b网站赚钱,深圳优化公司,设计一个小程序需要多少钱,vb怎么做网站W...Y的主页 😊 代码仓库分享 💕 前言: 今天是链表顺序表OJ练习题最后一次分享,每一次的分享题目的难度也再有所提高,但是我相信大家都是非常机智的,希望看到博主文章能学到东西的可以一键三连关注一下博主…

W...Y的主页 😊

代码仓库分享 💕


前言:

 今天是链表顺序表OJ练习题最后一次分享,每一次的分享题目的难度也再有所提高,但是我相信大家都是非常机智的,希望看到博主文章能学到东西的可以一键三连关注一下博主。

话不多说,我们来看今天的OJ习题.。

【leetcode 142.环形链表II】

OJ链接

给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

题目函数接口:

head:目标链表


分析:在上一篇博客中,我们讲述了如何寻找相遇点,创建两个指针slow与fast,fast的速度为slow的两倍,最终会在环中追及到。

下面讲述的方法与昨天的有关联: 

slow进入环后只会走不到一圈就会被fast追上,如果L足够长,环足够小fast会在环中走n圈(n>=1)。

我们分析完,题目就会迎刃而解。我们只需要先找到相遇点,然后一个指针从起点走,一个指针从相遇点走,它们相遇后的地址就是我们要的答案!!!

代码演示:

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode *fast = head;struct ListNode *slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(fast == slow ){struct ListNode *cur = head;while(cur != slow){cur = cur->next;slow = slow->next;}return slow;}}return NULL;
}

 再给大家提供一种思路!!!

思路二:我们可以先找到相遇点,然后将环从相遇点截断,这个链表就变成了相交链表,然后找到相交链表的相交点即可。

这个想法很简便也很大胆,不知道相交链表已经做题方法的可以在顺序表链表OJ题(2)->【数据结构】中找到相交链表的介绍以及相关题型。

 

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {int lena = 1;int lenb = 1;struct ListNode *cura = headA;struct ListNode *curb = headB;while(cura->next){cura = cura->next;lena++;}while(curb->next){curb = curb->next;lenb++;}if(cura != curb){return NULL;}int gap = abs(lena-lenb);struct ListNode *llist = headA;struct ListNode *slist = headB;if(lena > lenb){;}else{llist = headB;slist = headA;}while(gap--){llist = llist->next;}while(llist != slist){llist = llist->next;slist = slist->next;}return llist;
}
struct ListNode *detectCycle(struct ListNode *head) {struct ListNode *fast = head;struct ListNode *slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(fast == slow){struct ListNode *meet = slow;struct ListNode *newhead = meet->next;meet->next = NULL;return getIntersectionNode(newhead, head);}} return NULL;
}

 【leetcode 138.复制带随机指针的链表】

OJ链接

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

构造这个链表的 深拷贝。 深拷贝应该正好由 n 个全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 

例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。

返回复制链表的头节点。

用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:

  • val:一个表示 Node.val 的整数。
  • random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为  null 。

你的代码只接受原链表的头节点 head 作为传入参数。

示例 1:

输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

示例 2:

输入:head = [[1,1],[2,1]]
输出:[[1,1],[2,1]]

示例 3:

输入:head = [[3,null],[3,0],[3,null]]
输出:[[3,null],[3,0],[3,null]]

题目函数接口:

head:目标链表


 这道题比较复杂,拷贝一般链表非常简单,但是这个链表比较特殊,在结构体中加入了随机指针,如果我们先将无random指针链表拷贝一份,再去寻找random指针在链表中指向的位置,会非常麻烦,我们必须不停遍历链表,时间复杂度就非常高O(n^2)。而且代码也会非常的复杂,不建议使用暴力解法。

现在唯一难点就是如何找到新链表中random对应的位置,因为创建新链表与目标链表的地址是没有任何关联的。

但是接下来的方法相对于暴力解法会非常轻松,这个想法也是非常新颖的!!

思路:

我们在原链表中每个结构体的后面插入新的结构体,将对应的内容拷贝到插入的新结构体中,就是这样:

这样我们就可以很方便的寻找random,创建一个指针copy,就比如上图中的13节点,我们需要拷贝13中的random到后面连接的新结构体中,只需要找到旧结构体中random指向的内容,让旧结构体的next的next->random等于copy指向的random即可。 最后一步只需要将完全拷贝好的新结构体拿下来尾插,组成一个新链表即可完成!!!

理论形成,时间开始:

struct Node* copyRandomList(struct Node* head) {struct Node*cur = head;while(cur){struct Node*next = cur->next;struct Node*copy = (struct Node*)malloc(sizeof(struct Node));copy->val = cur->val;cur->next = copy;copy->next = next;cur = next;}cur = head;while(cur){struct Node*copy = cur->next;if(cur->random == NULL){copy->random = NULL;}else{copy->random = cur->random->next;}cur = copy->next;}cur = head;struct Node*copyhead = NULL;struct Node*copytail = NULL;while(cur){struct Node* copy = cur->next;struct Node* next = copy->next;if(copytail == NULL){copyhead = copytail = copy;}else{copytail->next = copy;copytail = copytail->next;}cur->next = next;cur = next;}return copyhead;
}

 新节点插入老节点中、copy指针的寻找新链表……都需要我们画图更好的理解。

这两道题都是想法比较前卫,一般方法比较困难的题,虽然用c语言比较麻烦,但是等到后面我们掌握了map以及哈希结构就会非常简单。

以上就是本次OJ题目的全部内容,希望大家看完有收获,一键三连支持一下博主吧!!!😘😘 

http://www.dt0577.cn/news/37054.html

相关文章:

  • 没有网站备案可以做诚信认证嘛免费广州seo
  • 一般网站版式有哪几种在线超级外链工具
  • 建设银行车主卡网上交罚款网站女教师遭网课入侵视频大全
  • 邢台做网站安卓优化大师最新版下载
  • 济南做网站的价格青岛网络seo公司
  • 服饰 公司 网站建设百度网盘网页
  • 电子商务网站建设实验原理吸引客流的25个技巧
  • 外贸做网站推广手机百度网址大全首页
  • 关键词优化排名易下拉效率网站关键词优化报价
  • 橙子建站仅向商家提供技术如何做一个网站
  • 桂林做网站推广恶意点击软件怎样使用
  • 做兼职翻译的网站新闻平台发布
  • 门户型网站建设方案查关键词的排名工具
  • 未来 网站开发 知乎重庆seo优化
  • 安徽地方政府网站建设情况搜索引擎的营销方法有哪些
  • 一键生成文案的网站保定seo推广公司
  • 学做花蛤的网站加盟教育培训哪个好
  • 网站建设技术服务2345网址导航官网官方电脑版下载
  • 律师做几个网站企业营销策划有限公司
  • WordPress站群更新流程优化
  • 陕西省城乡建设学校网站上海营销seo
  • 网站的空间什么意思线上推广渠道主要有哪些
  • 做视频网站赚做视频网站赚厦门seo网络优化公司
  • 网站做地区定位跳转权重查询爱站网
  • 开通网站的会计科目怎么做湖南知名网络推广公司
  • 关于做香奈儿网站的PPT今天的最新消息新闻
  • 网站301在哪里做广州网站制作实力乐云seo
  • 开发一个直播app网站seo优化检测
  • 辅料企业网站建设费用软件开发培训班
  • 演出公司网站建设seo代码优化包括哪些