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

【C++】LeetCode:LCR 026. 重排链表

题干

LCR 026. 重排链表

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

 L0 → L1 → … → Ln-1 → Ln 
请将其重新排列后变为:

L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

解法:寻找链表中点 + 链表逆序 + 合并链表

/*** 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 *getMid(ListNode* head) {ListNode* fast = head;ListNode* slow = head;while (fast != nullptr && fast->next != nullptr) {fast = fast->next->next;slow = slow->next;}return slow;}// 反转链表ListNode *revers(ListNode* head) {ListNode *pre = nullptr;ListNode *curr = head;while (curr != nullptr) {ListNode *next = curr->next;curr->next = pre;pre = curr;curr = next;}return pre;}// 合并两个链表void merge(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;}}// 重新排序链表void reorderList(ListNode* head) {if (head == nullptr || head->next == nullptr) {return;}ListNode* mid = getMid(head);ListNode *rightHead = mid->next;mid->next = nullptr;ListNode *reversedRight = revers(rightHead);merge(head, reversedRight);}
};

解析:

这道题综合了前几道题比较基础的算法,正好可以用来复习。

1.找到原链表的中点(参考「876. 链表的中间结点」)。
2.将原链表的右半端反转(参考「206. 反转链表」)。
3.合并两个链表。

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

相关文章:

  • 【Linux】vim编辑器
  • delphi 12 idhttpsever(S)+idhttp(C) 实现简单的JSON API服务
  • JVM 主副内存 详解
  • sscanf与sprintf函数
  • 【k8s】创建基于sa的token的kubeconfig
  • Gentoo Linux部署LNMP
  • 2411C++,CXImage简单使用
  • 什么是 Kubernetes(K8s)?
  • 深入解析:TypeScript 与 Vue 的完美结合
  • 机器学习周志华学习笔记-第13章<半监督学习>
  • 软件工程——期末复习(1)
  • 【JavaEE初阶 — 网络编程】实现基于TCP协议的Echo服务
  • vue结合canvas动态生成水印效果
  • Qt 5 中的 QTextStream 使用指南
  • 中安证件OCR识别技术助力鸿蒙生态:智能化证件识别新体验
  • SpringBoot 框架下基于 MVC 的高校办公室行政事务管理系统:设计开发全解析
  • 【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码
  • Selenium3+Python如何操作键盘
  • PLC协议
  • C_字符串的一些函数
  • 使用Native AOT发布C# dll 提供给C++调用
  • Git 提交代码日志信息
  • Request method ‘POST‘ not supported(500)
  • 终端环境下关闭显示器
  • 常见排序算法总结 (三) - 归并排序与归并分治
  • 【后端开发】Go语言编程实践,Goroutines和Channels,基于共享变量的并发,反射与底层编程
  • PyTorch 2.5.1: Bugs修复版发布
  • 【Android】组件化嘻嘻嘻gradle耶耶耶
  • vulnhub靶场【哈利波特】三部曲之Aragog
  • HarmonyOS开发中,如何高效定位并分析内存泄露相关问题