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

数据结构:力扣OJ题(每日一练)

目录

题一:环形链表

思路一:

题二:复制带随机指针的链表

 思路一:

本人实力有限可能对一些地方解释的不够清晰,可以自己尝试读代码,望海涵!


题一:环形链表

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

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

不允许修改 链表。

示例 1:

思路一:

        定义快慢指针:slow,fast,slow每次走一步,fast每次走两步;假设到环口长度为L,环的周长为C,slow从环口到相遇点为S,如下图:slow走了:L+S fast走了:2*(L+S);当slow到环口时fast已经走了n圈到相遇时n>=1,所以fast到相遇时走了:L+n*C+S
得出运算式:L = n*C-S结论:一个指针从起点走,一个从相遇点走,他们会在入口点相遇。

struct ListNode *detectCycle(struct ListNode *head) 
{struct ListNode* slow = head;struct ListNode* fast = head;struct ListNode* newnode = head;//判断有没有相遇点while(fast && fast->next){slow = slow->next;fast = fast->next->next;//找到相遇点if(slow == fast){struct ListNode* node = slow;//分别从起点和相遇点开始走while(node != newnode){newnode = newnode->next;node = node->next;}return newnode;}}return NULL;
}

题二:复制带随机指针的链表

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

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

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

返回复制链表的头节点。

示例 1:

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

 思路一:

第一步:在原链表的每一个之间开辟一块相同空间的copy将val和下一个的地址复制,并改变cur->next=copy;

第二步:因为每个原链表后面都有一个复制的copy链表所以copy-> randon都可以指向自己复制的randon核心: copy=cur-> randon->next

第三步:将copy链表从原链表head上分离出来,并将各自的节点接上

 

 

struct Node* copyRandomList(struct Node* head) {struct Node* cur = head;while(cur){struct Node* next = cur->next;//开辟copy的节点struct Node* copy = (struct Node*)malloc(sizeof(struct Node));//复制值copy->val = cur->val;//插入copy->next = next;cur->next = copy;//向后走cur = next;}cur = head;while(cur){struct Node* copy = cur->next;if(cur->random != NULL){//copy的随机节点指向自己的随机节点copy->random = cur->random->next;}else{copy->random = NULL;}cur = copy->next;}//分离链表struct Node* copyhead = NULL;struct Node* copytail = NULL;cur = head;while(cur){struct Node* copy = cur->next;struct Node* next = copy->next;//分离copy链表if(copytail == NULL){copyhead = copytail = copy;}else{copytail->next = copy;copytail = copytail->next;}//恢复原链表cur->next = next;cur = next;}return copyhead;
}

本人实力有限可能对一些地方解释的不够清晰,可以自己尝试读代码,望海涵!

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

相关文章:

  • 【论文阅读】基于深度学习的时序预测——Informer
  • 机器学习 | Python实现GBDT梯度提升树模型设计
  • elementUi表单恢复至初始状态并不触发表单验证
  • 大模型相关知识
  • 无法在 macOS Ventura 上启动 Multipass
  • 算法通关村第六关——原来如此简单
  • 企业权限管理(八)-登陆使用数据库认证
  • 第一百二十五天学习记录:C++提高:STL-deque容器(下)(黑马教学视频)
  • 案例12 Spring MVC入门案例
  • 【React】精选10题
  • VS Spy++进程信息获取
  • Java课题笔记~ SpringMVC概述
  • SOPC之NIOS Ⅱ遇到的问题
  • uniapp uni-datetime-picker 日期和光标靠右
  • 关于axios请求中的GET、POST、PUT、DELETE的一些认知
  • go-zero 是如何做路由管理的?
  • Springboot集成ip2region离线IP地名映射-修订版
  • 智能驾驶系列报告之一:智能驾驶 ChatGPT时刻有望来临
  • 设计HTML5文档结构
  • vue echarts中按钮点击后修改值 watch数据变化后刷新图表
  • React antd tree树组件 - 父子节点没有自动关联情况下 - 显示半选、全选状态以及实现父子节点互动
  • 优漫动游 大厂需要什么样的ui设计师呢?
  • TiDB Bot:用 Generative AI 构建企业专属的用户助手机器人
  • uniapp 使用canvas画海报(微信小程序)
  • TiDB 应急运维脚本,更加方便的管理TiDB集群
  • 第二部分:AOP
  • 分享一组天气组件
  • 微服务中RestTemplate访问其他服务返回值转换问题
  • Centos7.9上(离线)安装Gitlab
  • pikachu中RCE出现乱码的解决的方案