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

LCR 026

题目:LCR 026


解法一:线性表

将链表中所有元素加入数组中,创建两个指针,分别指向数组的头部和尾部,然后向中间遍历

    public void reorderList(ListNode head) {if (head == null || head.next == null || head.next.next == null) return;List<ListNode> list = new ArrayList<>();ListNode cur = head;while (cur != null) {list.add(cur);cur = cur.next;}ListNode reorderNode = new ListNode(0, head);for (int i = 0; i < list.size(); i++) {int index1 = i, index2 = list.size() - 1 - i;ListNode start = list.get(index1);ListNode end = list.get(index2);if (index1 == index2) {reorderNode.next = start;start.next = null;break;} else if (index1 == index2 - 1) {reorderNode.next = start;start.next = end;end.next = null;break;} else {reorderNode.next = start;start.next = end;reorderNode = end;}}}

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

    public void reorderList(ListNode head) {if (head == null || head.next == null || head.next.next == null) return;ListNode middleNode = middleNode(head);ListNode reversedList = reverseList(middleNode);mergeList(head, reversedList);}public ListNode mergeList(ListNode head1, ListNode head2) {if (head1 == null || head2 == null) return head1;ListNode dummy = new ListNode(0), prev = dummy, node1 = head1, node2 = head2;while (node2 != null) {if (node1 == node2) {prev.next = node2;break;}ListNode nextNode1 = node1.next;ListNode nextNode2 = node2.next;prev.next = node1;node1.next = node2;prev = node2;node1 = nextNode1;node2 = nextNode2;}return dummy.next;}public ListNode middleNode(ListNode head) {if (head == null || head.next == null) return head;ListNode slow = head, fast = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}public ListNode reverseList(ListNode head) {ListNode prev = null, cur = head, next;while (cur != null) {next = cur.next;cur.next = prev;prev = cur;cur = next;}return prev;}


http://www.mrgr.cn/news/29694.html

相关文章:

  • JavaScript高级程序设计基础(四)
  • rocketmq——docker-compose安装
  • 【机器学习】数学知识:标准差,方差,协方差,平均数,中位数,众数
  • CSS:导航栏三角箭头
  • 【极限编程(XP)】
  • WPF 应用程序中使用 Prism 框架时,有多种方式可以注册服务和依赖项
  • JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
  • Python 入门教程(4)数据类型 | 4.3、数字类型
  • 请求转发和重定向的区别
  • 掌握Python虚拟环境:隔离项目依赖,提升开发效率的必备指南
  • 【Transformer深入学习】之一:Sinusoidal位置编码的精妙
  • Ubuntu上如何使用sh文件更新CMake
  • Redis - 深入理解Redis事务
  • 微服务配置中心介绍
  • 【学习笔记】IOC容器
  • 《深度学习》—— PyTorch的神经网络模块中常用的损失函数
  • 【AI学习】AI绘画发展简史
  • Qt_多元素控件
  • Fiddler抓包工具实战
  • AutoSar AP中Proxy Class中Methods描述的总结
  • 基于SpringBoot+Vue+MySQL的在线招投标系统
  • 轨迹规划——估计规划轨迹曲率代码实现
  • 数据结构之结构体
  • bmp格式图片怎么转换jpg?这几种转换方法超级好用!
  • 保护您的企业免受网络犯罪分子侵害的四个技巧
  • Stream流操作