Given a singly linked list LL 0→L 1→…→L n-1→L n,reorder it to: L 0→L n →L 1→L n-1→L 2→L n-2→…

You must do this in-place without altering the nodes' values.

For example,Given{1,2,3,4}, reorder it to{1,4,2,3}.

思路:先从中间切断分为两个链表,将后一个链表反转,再逐个插入到前一个链表。

#include<iostream>
using namespace std;struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};
//链表结构定义ListNode* reverse(ListNode *head){ListNode* pRH = NULL;ListNode* p = head;ListNode* pre = NULL;// 保持在处理每个节点时候一样,初始化NULL 第一个节点重新指向NULLwhile (p != NULL){ListNode *tmp = p->next;if (tmp == NULL) pRH = p;p->next = pre;pre = p;p = tmp;}return pRH;}
// 反转链表
void reorderList(ListNode *head) {int length = 0;ListNode *p = head;// 统计列表的总长度while (p != NULL){length++;p = p->next;}int tmp = 0;ListNode *q = head;while (tmp < ((length - 1) / 2)){q = q->next;tmp++;}ListNode *head1 = q->next;q->next = NULL;ListNode *head2 = reverse(head1);p = head;q = head2;// 链表从中间切断分为两个部分while(p != NULL && q != NULL){ListNode *tp = q->next;q->next = p->next;p->next = q;if (q)p = q->next;q = tp;}
// 将链表的后半部分反转后,链接到前半部分的链表}int main(){  //测试int a[] = {1, 2, 3, 4, 5,6,7,8};ListNode *head = new ListNode(a[0]);ListNode *p = head;for (int i = 1; i < 8; i++){p->next = new ListNode(a[i]);p = p->next;}reorderList(head);ListNode *q = head;while (q){cout << q->val << endl;q = q->next;}}

leetcode 链表1相关推荐

  1. LeetCode——链表

    LeetCode--链表 目录 概述 找出两个链表的交点 链表反转 归并两个有序的链表 从有序链表中删除重复节点 删除链表的倒数第n个节点 交换链表中的相邻节点 链表求和 回文链表 分隔链表 链表元素 ...

  2. 面试官系列 - LeetCode链表知识点题型总结

    文章目录 前言 知识点 什么是链表 类别 单向链表 循环链表 双向链表 双向循环链表 与数组的性能对比 优缺点 常用技巧 题型总结 基本操作 删除类 翻转类题型 合并链表 环形链表 拆分链表 排序链表 ...

  3. dummy节点——leetcode链表题必备

    做leetcode链表题的时候,需要额外考虑链表头部的特殊情况.但是,往往考虑不够周全,导致最后通过不断试错,修改代码.代码变得臃肿,可读性差. 其实,引入一个dummy节点就可以解决大部分需要考虑头 ...

  4. 为了OFFER,花了几个小时,刷下Leetcode链表算法题

    @Author:Runsen @Date:2020/9/13 链表是我这辈子的痛啊,每次学到链表,就往往不会,就没有继续学下去.现在大四不能继续让这个链表阻碍我了.现在基本是重刷数据结构和算法,毕竟笔 ...

  5. leetcode(链表专题)

    数组模拟链表 #include<iostream> using namespace std;const int N = 100; // 单链表 // head存储链表头,e[]存储节点的值 ...

  6. LeetCode 链表相关题目总结

    之前已经对链表相关常用操作进行了总结.在这里,对 LeetCode 与链表相关的题目解答思路进行总结. 1. 两个链表,求是否有相交的节点并返回 方案一:将两个链表的各节点依次存入两个对象中,然后双层 ...

  7. leetcode链表题(大致是由易到难

    链表系列 leetcode237删除节点 86分隔链表. 剑指 Offer 06. 从尾到头打印链表 解法1:常规 解法2:栈 解法3:用头插法对链表进行逆置 剑指 Offer 24. 反转链表 第一 ...

  8. 链表OJ无从下手??磕磕绊绊终于AC却不知其所以然???这篇文章带你刷穿Leetcode链表题!

    一.前言 学完了链表的基础知识,是时候用一些OJ题目来练练手了!但是我们不仅仅要追求AC,还要能够总结提炼相关的思想方法.在本文中作者将运用虚拟头结点+递归+双指针三种技巧,逐题精讲常见常考的链表OJ ...

  9. 假设以带头结点的循环链表表示队列_[leetcode链表系列]2 删除链表中的节点

    复习链表的插入 链表的一个节点是由数据域和指针域构成,指针域的地址值为下个元素的地址.那么我们需要插入或者删除一个元素怎么处理呢? 先查看原始链表结构,准备将结点x插入链表中. 此时我们需要先保存n节 ...

  10. 使用循环链表实现一个通讯录的管理程序_【LeetCode链表题型总结】

    点击上方蓝字,关注公众号 链表概念的讲解 链表是什么 链表是一种线性数据结构,每个节点都存有数据,通过指针将各个节点链接在一起. 链表的性质 一致性: 每个节点有相同的数据结构,相同的数据大小,内存中 ...

最新文章

  1. python3.8安装tensorflow1.14时候报错Can‘t connect to HTTPS URL because the SSL module is not available
  2. java合并整形_java中2个int合并成一个long
  3. 【直播课】6小时教你掌握MMdetection工程落地实践
  4. 高德地图API路径规划结果清除
  5. JDK1.8 之Stream API总结
  6. Python-爬虫-requests
  7. typescript_清洁架构的TypeScript刺
  8. 嵌入式linux mongodb,小白在Ubuntu安装mongoDB与mongo-c-driver
  9. yii不能没有提示验证错误信息_安装Mac系统时提示”应用程序副本不能验证 它在下载过程...”的解决方法...
  10. 从零开始编写深度学习库(五)Eigen Tensor学习笔记2.0
  11. unicode编码表查询
  12. 网络安全实战之靶场渗透技术
  13. 谷歌浏览器去除广告--广告终结者
  14. linux qt 生成word报告_Qt 生成word、pdf文档
  15. SCI/ISTP和EI论文检索号IDS number和收录号查询方法,详细使用教程和指南手册
  16. 17家中国初创IT公司的失败史【转】
  17. 资治通鉴-6 听的智慧
  18. 使用GSM6315模块,采用http或者https协议与服务器通信笔记
  19. 裸辞后进入华为,拿下34K测试岗offer....
  20. Layui开关添加弹出确认框及layer.confirm的回调

热门文章

  1. ipa apk.cn dbl.html,前端解析ipa、apk安装包信息 ―― app-info-parser
  2. html5鼠标点击弹出层,jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
  3. matlab中quiver,matlab quiver 比例尺
  4. php视频转数据流,图像转数据流-aspphp | 鬼仔's Blog鬼仔's Blog
  5. 计算机专业马来西亚,去马来西亚读计算机专业如何
  6. dataframe数组做元素_大数据技术之使用 DataFrame 读取复杂 JSON 中的嵌套数组
  7. oracle账户用root权限执行sh,安装Oracle执行orainstRoot.sh与root.sh作用
  8. oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler
  9. 南京大学杨杨计算机,国际交流,研途有术 | 博士生国际学术交流经验分享会(四)...
  10. 计算机三级网络技术综合题解析,计算机三级网络技术上机考试习题答案及解析...