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

408算法题leetcode--第15天

143. 重排链表

  • 143. 重排链表
  • 思路:之前三题的合并
  • 时间: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* findMiddle(ListNode* head){ListNode* p = head, *q = head;// q移动2步,p移动一步while(q->next && q->next->next){q = q->next->next;p = p->next;}return p;}ListNode* reverseList(ListNode* head){ListNode* pre = nullptr, *cur = head, *next = nullptr;while(cur){next = cur->next;cur->next = pre;pre = cur;cur = next;}return pre;}void mergeList(ListNode* l, ListNode* r){ListNode* p = l, *q = r;while(p && q){ListNode* t1 = p->next, *t2 = q->next;p->next = q;p = t1;q->next = p;q = t2;}}void reorderList(ListNode* head) {if(head == nullptr) return;// 思路:找到链表中点,右链表逆转,逐一合并左右链表节点// 1. 找中点ListNode* mid_head = findMiddle(head);ListNode* right_head = mid_head->next;mid_head->next = nullptr;// 2. 右边翻转right_head = reverseList(right_head);// 3. 合并两个链表mergeList(head, right_head);}
};

2. 两数相加

  • 2. 两数相加
  • 思路:注释
  • 时间:O(max(m, 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* addTwoNumbers(ListNode* l1, ListNode* l2) {// 思路1:读取数字,倒序,相加,倒序,链表// 思路2:对应位置相加,进位到后一位ListNode* dummy_head = new ListNode();ListNode* cur = dummy_head;int carry = 0;while(l1 || l2 || carry){int a = l1 ? l1->val : 0;int b = l2 ? l2->val : 0;int sum = a + b + carry;carry = sum / 10;cur->next = new ListNode(sum % 10);cur = cur -> next;if(l1) l1 = l1->next;if(l2) l2 = l2->next;}return dummy_head->next;}
};

445. 两数相加 II

  • 445. 两数相加 II
  • 思路:先翻转,再相加(同上)
  • 时间: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* reverseList(ListNode* head){ListNode* pre = nullptr, *cur = head, *next = nullptr;while(cur){next = cur->next;cur->next = pre;pre = cur;cur = next;}return pre;}ListNode* addList(ListNode* lhs, ListNode* rhs){ListNode* dummy_head = new ListNode();ListNode* cur = dummy_head;int carry = 0;while(carry || lhs || rhs){int a = lhs ? lhs->val : 0;int b = rhs ? rhs->val : 0;int sum = a + b + carry;carry = sum / 10;cur->next = new ListNode(sum % 10);cur = cur->next;if(lhs) lhs = lhs->next;if(rhs) rhs = rhs->next;}return dummy_head->next;}ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {// 反转2个链表,然后相加ListNode* p = reverseList(l1), *q = reverseList(l2);ListNode* ret = addList(p, q);return reverseList(ret);}
};

相关文章:

  • 着色器ShaderMask
  • Python 课程18-SQLAlchemy
  • C++ bitset(位图)的模拟实现
  • RabbitMQ 快速入门
  • 从静态多态、动态多态到虚函数表、虚函数指针
  • 基于JAVA+SpringBoot+Vue的疫苗发布和接种预约系统
  • 认知世界的经济学读书笔记
  • slam典型应用手搓
  • 暴雨讲堂:算力高速互联催化超节点开启AI新篇章
  • Python知识点:如何使用Python进行无人机数据处理
  • Gstreamer中,使用mp4或者flv作为视频源去推流RTP等视频流时,需要先解码在编码才能正常
  • uniapp view设置当前view之外的点击事件
  • 类与对象—python
  • Anaconda教程
  • Kubernetes服务发布基础
  • “大数据应用场景”之隔壁老王(连载四)
  • 【mysql】环境安装、服务启动、密码设置
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS居中完全指南——构建CSS居中决策树
  • CSS相对定位
  • Cumulo 的 ClojureScript 模块已经成型
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • javascript数组去重/查找/插入/删除
  • k个最大的数及变种小结
  • MySQL-事务管理(基础)
  • 区块链分支循环
  • 赢得Docker挑战最佳实践
  • 正则表达式
  • 自制字幕遮挡器
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • # Redis 入门到精通(一)数据类型(4)
  • $.proxy和$.extend
  • ${factoryList }后面有空格不影响
  • (~_~)
  • (1)SpringCloud 整合Python
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (4.10~4.16)
  • (5)STL算法之复制
  • (CPU/GPU)粒子继承贴图颜色发射
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (k8s)kubernetes 部署Promehteus学习之路
  • (Note)C++中的继承方式
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (转)树状数组
  • (转载)OpenStack Hacker养成指南
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net 提取注释生成API文档 帮助文档