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

代码随想录-DAY④-链表——leetcode 24 | 19 | 142

24

思路

如果 pre 的后面没有节点或者只有一个节点,则没有更多的节点需要交换,

否则,通过更新节点的指针关系交换 pre 后面的两个节点,

最后,返回新的链表的头节点 dummyhead->next。

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)

代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode *dummyhead = new ListNode(0, head);ListNode *pre = dummyhead, *cur = head, *ahead;while(pre->next!=nullptr && pre->next->next!=nullptr){ahead = cur->next;cur->next = ahead->next;ahead->next = cur;pre->next = ahead;pre = cur;cur = cur->next;}ListNode* ans = dummyhead->next;delete dummyhead;return ans;}
};

19

思路

让 fast 先移动n步,然后让 fast 和 slow 同时移动,

直到 fast 指向链表末尾,删掉slow所指向的节点。

使用虚拟头结点,方便处理删除实际头结点的逻辑,

注意空间清理。

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)

代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode *dummyhead = new ListNode(0, head);ListNode *fast=head, *slow=dummyhead, *temp, *ans;while(n--){fast=fast->next;}while(fast!=nullptr){fast=fast->next;slow=slow->next;}temp=slow->next;slow->next=slow->next->next;ans = dummyhead->next;delete temp;delete dummyhead;return ans;}
};

142

思路

设链表中环外部分的长度为 a。slow 指针进入环后,又走了 b 的距离与 fast 相遇。此时,fast 指针已经走完了环的 n 圈,因此它走过的总距离为 a+n(b+c)+b=a+(n+1)b+nc。

根据题意,任意时刻,fast 指针走过的距离都为 slow 指针的 2 倍。

因此,我们有 a+(n+1)b+nc=2(a+b)⟹a=c+(n−1)(b+c)
有了 a=c+(n−1)(b+c) 的等量关系,我们会发现:从相遇点到入环点的距离加上 n−1 圈的环长,恰好等于从链表头部到入环点的距离。

因此,当发现 slow 与 fast 相遇时,我们再额外使用一个指针 ptr。起始,它指向链表头部;随后,它和 slow 每次向后移动一个位置。最终,它们会在入环点相遇。

详见官方题解:

. - 力扣(LeetCode)

时间复杂度:O(N)

空间复杂度:O(1)

代码

更更更

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

相关文章:

  • ORA-12537: TNS:连接关闭/Io 异常: Got minus one from a read call
  • 【Python】一文向您详细介绍 np.inner()
  • pdf分割,这几款软件轻松搞定PDF拆分
  • 【吊打面试官系列-MyBatis面试题】什么是 MyBatis 的接口绑定?有哪些实现方式?
  • 实时消息推送系统,写得太好了!
  • 泛微E9开发 控制日期浏览按钮的可选日期范围
  • ppt接单渠道大公开‼️
  • 从零开始搭建vite开发环境
  • FastAPI本身是一个高性能的Web框架
  • yolov7:训练自己的数据集和测试
  • Redis 集群模式
  • 如何快速实现一个无缝轮播效果
  • kubernetes集群证书过期问题解决
  • PHP框架详解-symfony框架
  • Linux--线程的控制
  • 大数据------JavaWeb------会话跟踪技术(Cookie、Session)(完整知识点汇总)
  • crossJoin笛卡尔积
  • Java客户端调用SOAP方式的WebService服务实现方式分析
  • 华为机试真题--字符串序列判定
  • Linux内核 -- 虚拟化之virtqueue结构
  • 【pytorch18】Logistic Regression
  • PostgreSQL的使用
  • python 高级技巧 0706
  • 面试经典 106. 从中序与后序遍历序列构造二叉树
  • 如何解决群晖Docker注册表查询失败/无法拉取镜像等问题
  • 【Scrapy】 深入了解 Scrapy 中间件中的 process_spider_input 方法
  • 数据库MySQL---基础篇
  • 欧姆龙安全PLC及周边产品要点指南
  • tableau气泡图与词云图绘制 - 8
  • C语言 找出一个二维数组中的鞍点