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

day04打卡

day04打卡

面试题 02.07. 链表相交

时间复杂度:O(N),空间复杂度:O(1)

第一想法:求出两个链表长度,走差距步,再遍历找有没有相交

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* a = headA, * b = headB;//求出 两个链表的长度int lenA = 0, lenB = 0;while(a != NULL) {lenA++;a = a->next;}while(b != NULL){lenB++;b = b->next;}a = headA, b = headB;//让两个链表长度统一//让a做长的链表if(lenA < lenB){swap(lenA, lenB);swap(a, b);}int n = lenA - lenB;//a走差距步while(n--){a = a->next;}//遍历链表,看看有没有相交while(a != NULL){if(a == b) return a;else {a = a->next;b = b->next;}}return NULL;}
};

19. 删除链表的倒数第 N 个结点

时间复杂度:O(N),空间复杂度:O(1)

第一想法:双指针,快指针先走n步,再同时走,走到快指针到空时,修改慢指针的连接即可

/*** 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* newHead = new ListNode;newHead->next = head;ListNode* fast = head, * slow = newHead;//快指针先走n步while(n--) fast = fast->next;//同时走,快指针到空时,slow就是倒数第n个节点while(fast != nullptr){fast = fast->next;slow = slow->next;}slow->next = slow->next->next;ListNode* ret = newHead->next;delete newHead;return ret;}
};

24. 两两交换链表中的节点 - 力扣(LeetCode)

时间复杂度:O(N),空间复杂度:O(1)

第一想法:迭代,设置一个虚拟头结点,设定三个指针,prev,cur,next。修改链表关系即可

困难:没有把握好三个指针的连接关系

看了题解:画图实现了三个指针的链接关系和递归解法

/*** 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) {//迭代// if(head == nullptr || head->next == nullptr) return head;// ListNode* newHead = new ListNode;// newHead->next = head;// ListNode* prev = newHead, * cur = head, * next = head->next;// while(cur != nullptr && next != nullptr)// {//     prev->next = next;//     cur->next = next->next;//     next->next = cur;//     //交换节点//     prev = cur;//     cur = cur->next;//     if(cur) next = cur->next;// }// return newHead->next;//递归//递归出口if(head == nullptr || head->next == nullptr) return head;//子问题ListNode* newHead = swapPairs(head->next->next);ListNode* ret = head->next;head->next = newHead;ret->next = head;return ret;}
};
http://www.lryc.cn/news/279841.html

相关文章:

  • 语义分割miou指标计算详解
  • Unity3d 实现直播功能(无需sdk接入)
  • 计算机缺失msvcr100.dll如何修复?分享五种实测靠谱的方法
  • 面试宝典进阶之redis缓存面试题
  • 调试(c语言)
  • opencv-4.8.0编译及使用
  • Jmeter 性能-监控服务器
  • Excel学习
  • 【技能---labelme软件的安装及其使用--ubuntu】
  • 回归预测 | Matlab实现SSA-CNN-LSTM-Attention麻雀优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制)
  • css垂直水平居中的几种实现方式
  • OpenHarmony之hdc
  • 【爬虫实战】-爬取微博之夜盛典评论,爬取了1.7w条数据
  • CST2024的License服务成功启动,仍报错——“The desired daemon is down...”,适用于任何版本!基础设置遗漏!
  • matlab中any()函数用法
  • Apache ECharts | 一个数据可视化图表库
  • m1 + swoole(hyperf) + yasd + phpstorm 安装和debug
  • group by 查询慢的话,如何优化?
  • 【重学C语言】一、C语言简介
  • 【MATLAB源码-第109期】基于matlab的哈里斯鹰优化算发(HHO)机器人栅格路径规划,输出做短路径图和适应度曲线。
  • NestJS 如何自定义中间件以及实际项目基于中间件提升项目开发效率
  • CMake入门教程【核心篇】设置和使用缓存变量
  • MinIO (五) .net core实现分片上传
  • 如何有效提高矢量网络分析仪的动态范围
  • Python 安卓开发:Kivy、BeeWare、Flet、Flutter
  • 50天精通Golang(第16天)
  • imx6ull基于yocto工程的l汇编点亮ed
  • vue 前端等比例压缩图片(再转换成文件后上传后端)
  • 解决在eclipse2021中,用mysql-connector-java-8.0.18.jar不兼容,导致无法访问数据库问题
  • 5 微信小程序