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. linux bash: sqlplus: command not found 错误处理
  2. POI导出word带图片及本地测试没问题,在服务器上找不到模板的问题
  3. 复数可以阐释的如此优雅
  4. 不同类型的变量与零值比较的方法
  5. 创建线程方式二 java 1615474026
  6. Linux下搭建AP
  7. 成功解决 AttributeError: module ‘neat’ has no attribute ‘Config’解决方式
  8. 2021-11-17
  9. 手机辅助java脚本_android 手机一个辅助阅读工具
  10. IOS客户端Coding项目记录导航
  11. 锋利jquery 网络版
  12. 基于iOS11的HEVC(H.265)硬编码/硬解码功能开发指南
  13. java 自定义控件_自定义控件的开发
  14. node.js版本问题
  15. [WDS] Disconnected!问题解决
  16. 星际战甲服务器维护时间,星际战甲 官网:2月4日服务器维护结束公告
  17. 全网最全关闭小米手机MIUI系统广告教程
  18. js渲染10万数据列表,不阻塞UI
  19. Python 常见单词-集合
  20. express的api接口暴露

热门文章

  1. 解决java报Too many open files错误
  2. Oracle11使用现在数据库文件,oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库...
  3. 制药工程专业计算机二级,全国制药工程本科专业认证标准2016年12月修订.pdf
  4. java转动的风扇课程设计,课程设计—智能风扇设计报告
  5. java ip地址类,实现获取主机名称,IP地址的类 (java)
  6. c语言 recv_sin,C++_C语言中经socket接收数据的相关函数详解,recv()函数: 头文件:#incl - phpStudy...
  7. python函数的四个特点_Python面向对象三大特征之封
  8. 广州计算机应用能力考试,2017年广州职称计算机考试报名时间和科目
  9. 自动化测试unittest测试框架实例
  10. python自动化框架学习-pyautogui