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

链表好题-多种实现

143. 重排链表 - 力扣(LeetCode)

这道题非常经典,很多大厂都作为面试题。

方法一:寻找中点+翻转链表+合并链表

class Solution {
public:void reorderList(ListNode* head) {if (head == nullptr) {return;}ListNode* mid = middleNode(head);ListNode* l1 = head;ListNode* l2 = mid->next;mid->next = nullptr;l2 = reverseList(l2);mergeList(l1, l2);}ListNode* middleNode(ListNode* head) {ListNode* slow = head;ListNode* fast = head;while (fast->next != nullptr && fast->next->next != nullptr) {slow = slow->next;fast = fast->next->next;}return slow;}ListNode* reverseList(ListNode* head) {ListNode* prev = nullptr;ListNode* curr = head;while (curr != nullptr) {ListNode* nextTemp = curr->next;curr->next = prev;prev = curr;curr = nextTemp;}return prev;}void mergeList(ListNode* l1, ListNode* l2) {ListNode* l1_tmp;ListNode* l2_tmp;while (l1 != nullptr && l2 != nullptr) {l1_tmp = l1->next;l2_tmp = l2->next;l1->next = l2;l1 = l1_tmp;l2->next = l1;l2 = l2_tmp;}}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/reorder-list/solutions/452867/zhong-pai-lian-biao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这种方法非常经典,一道题顶三道题,其中各种边界条件也令人很头疼。

方法二:利用栈

class Solution {
public:void reorderList(ListNode* head) {stack<ListNode*> stk;ListNode* p = head;while(p) {stk.push(p);p = p->next;}p = head;while(!stk.empty()) {ListNode* LastCur = stk.top();stk.pop();ListNode* nxt = p->next;if(LastCur == nxt || LastCur->next == nxt) {LastCur->next = nullptr;break;}p->next = LastCur;LastCur->next = nxt;p = nxt;}}
};

其实思路是一样的,他那边的合并链表,我们主要是利用p = nxt这一条语句做到的(好好体会),反转链表是通过栈来翻转的,寻找中点是通过

找到的,同样要注意边界条件。这道题难度还是比较高的。

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

相关文章:

  • oracle数据恢复—oracle数据库执行truncate命令后的怎么恢复数据?
  • OneNet + openssl + MTLL
  • 分享两个日常办公软件:uTools、PixPin
  • Golang基础学习
  • [学习] GNSS信号跟踪环路原理、设计与仿真(仿真代码)
  • Python实例题:Python计算微积分
  • 如何判断指针是否需要释放?
  • Spark 之 AQE
  • 随访系统安装的记录
  • NLP学习路线图(二十四):门控循环单元(GRU)
  • Doris查询Hive数据:实现高效跨数据源分析的实践指南
  • vsCode使用本地低版本node启动配置文件
  • 在Ubuntu上使用 dd 工具制作U盘启动盘
  • el-table表格增加序号列index vue2和vue3的写法
  • 【学习记录】如何使用 Python 提取 PDF 文件中的内容
  • Spark 之 DataFrame 开发
  • 嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析
  • 机器学习KNN算法全解析:从原理到实战
  • 【QT】自定义QWidget标题栏,可拖拽(拖拽时窗体变为normal大小),可最小/大化、关闭(图文详情)
  • FPGA定点和浮点数学运算-实例对比
  • MySQL Binlog 数据恢复全指南
  • python版若依框架开发:后端开发规范
  • Linux编程:2、进程基础知识
  • 时序数据库IoTDB与EdgeX Foundry集成适配服务介绍
  • Android第十二次面试-多线程和字符串算法总结
  • ES6——数组扩展之Set数组
  • Cursor Rules 使用
  • 服务器数据恢复—服务器raid5阵列崩溃如何恢复数据?
  • Go语言堆内存管理
  • 【DAY41】简单CNN