问题描述 :

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,

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

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

示例 1:

给定链表 1->2->3->4, 重新排列为 1->4->2->3.

示例 2:

给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.

可使用以下代码,完成其中的reorderList函数,其中形参head指向无头结点单链表。

#include

using namespace std;

struct ListNode

{

int val;ListNode *next;ListNode() : val(0), next(NULL) {}ListNode(int x) : val(x), next(NULL) {}ListNode(int x, ListNode *next) : val(x), next(next) {}

};

class Solution

{

public:

void reorderList(ListNode* head){//填充本函数完成功能}

};

ListNode *createByTail()

{

ListNode *head;ListNode *p1,*p2;int n=0,num;int len;cin>>len;head=NULL;while(n<len && cin>>num){p1=new ListNode(num);n=n+1;if(n==1)head=p1;elsep2->next=p1;p2=p1;}return head;

}

void displayLink(ListNode *head)

{

ListNode *p;p=head;cout<<"head-->";while(p!= NULL){cout<<p->val<<"-->";p=p->next;}cout<<"tail\n";

}

int main()

{

ListNode* head = createByTail();Solution().reorderList(head);displayLink(head);return 0;

}

输入说明 :

首先输入链表长度len,然后输入len个整数,以空格分隔。

输出说明 :

输出格式见范例

输入范例 :

5
1 2 3 4 5

输出范例 :

head–>1–>5–>2–>4–>3–>tail

解法

#include<iostream>using namespace std;struct ListNode{int val;ListNode *next;ListNode() : val(0), next(NULL) {}ListNode(int x) : val(x), next(NULL) {}ListNode(int x, ListNode *next) : val(x), next(next) {}};class Solution{public:void reorderList(ListNode* head){if(head==NULL||head->next==NULL)return;struct ListNode *p,*q,*r,*headr;p=head;q=head;while(p&&q){p=p->next;q=q->next;if(q){q=q->next;}}q=head;while(q->next!=p){q=q->next;}q->next=NULL;//把链表从中间断开成为两段 headr=p;p=p->next;headr->next=NULL;//把反转的头结点摘下while(p){r=p->next;p->next=headr;headr=p;p=r;}//反转后半段链表 p=head->next;r=head;int flag=0;while(headr||p){if(flag==0){r->next=headr;r=headr;headr=headr->next;flag=1;}else{r->next=p;r=p;p=p->next;flag=0;}}r->next=NULL;}};ListNode *createByTail(){ListNode *head;ListNode *p1,*p2;int n=0,num;int len;cin>>len;head=NULL;while(n<len && cin>>num){p1=new ListNode(num);n=n+1;if(n==1)head=p1;elsep2->next=p1;p2=p1;}return head;}void  displayLink(ListNode *head){ListNode *p;p=head;cout<<"head-->";while(p!= NULL){cout<<p->val<<"-->";p=p->next;}cout<<"tail\n";}int main(){ListNode* head = createByTail();Solution().reorderList(head);displayLink(head);return 0;}

DHU 第一题 重排链表相关推荐

  1. leetcode算法题--重排链表★

    原题链接:https://leetcode-cn.com/problems/reorder-list/ 1.map void reorderList(ListNode* head) {map<i ...

  2. 力扣刷题——单链表系列——第一题:移除链表元素,从此链表初窥门径,神挡杀神~

    题目链接:力扣 力扣刷题------>单链表系列 第一种解法:在原链表上进行操作,小红日烧脑版 /*** Definition for singly-linked list.* public c ...

  3. 【区块反转】【链表合并】【反转链表】【链表元素分类】【链表去重】【重排链表】

    目录 说明: 1110 区块反转 输入格式: 输出格式: 输入样例: 输出样例: 1105 链表合并 输入格式: 输出格式: 输入样例: 输出样例: 1025 反转链表 输入格式: 输出格式: 输入样 ...

  4. 《LeetCode力扣练习》第160题 相交链表 Java

    <LeetCode力扣练习>第160题 相交链表 Java 一.资源 题目: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存 ...

  5. 《LeetCode力扣练习》第141题 环形链表 Java

    <LeetCode力扣练习>第141题 环形链表 Java 一.资源 题目: 给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针 ...

  6. 重排链表-c语言链表法解决

    重排链表-c语言链表法解决 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → - → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → L ...

  7. 【L2-022 重排链表】天梯赛L2系列详细解答

    天梯赛L2-022 重排链表 题目详情: 输入样例: 00100 6 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 6823 ...

  8. 41. 盘点那些必问的数据结构算法题之链表

    盘点那些必问的数据结构算法题之链表 0 概述 1 定义 2 基本操作 3 链表相关面试题 3.1 链表逆序 3.2 链表复制 3.3 链表合并 3.4 链表相交判断 3.5 判断链表是否存在环 3.6 ...

  9. 四川大学线下编程比赛第一题:数字填充

    四川大学线下编程比赛第一题:数字填充 公布公司: 有 效 期: CSDN 2014-09-27至2015-09-26 难 度 等 级: 答 题 时 长: 编程语言要求: 120分钟 C C++ Jav ...

最新文章

  1. Verilog初级教程(14)Verilog中的赋值语句
  2. 【Linux入门连载二】Linux系统有哪些基本目录?
  3. redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题...
  4. PHP递归复制文件夹的类
  5. python制作中秋贺卡_中秋节到了,送你一个Python做的Crossin牌“月饼”
  6. python学习-综合练习六(列表翻转、变量交换、复制列表、元素求和(lambda和递归)、字典排序、字典pop)
  7. spring mvc学习(50):java.lang.ClassNotFoundException: org.springframework.web.servlet. DispatcherSe
  8. fixed与sticky的区别
  9. SQL SERVER 2000 创建挂起的文件操作 解决方法
  10. Vue学习之监视属性watch
  11. 关于 QImage::Format_Mono
  12. python的发展生态_简说Python生态系统的14年演变
  13. EPM240T100的Pin
  14. 【STM32】STM32F103C8T6+L298N通过PWM控制直流电机转速
  15. json学习笔记,json与js对象格式的转换,js对象转json字符串,json格式转js对象
  16. _ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringEv
  17. 马三步内可以到达的点
  18. 弹性网卡支持私网多IP
  19. 微博营销有什么优势与缺点?如何利用微博开展营销?
  20. 《清平乐词》三篇——李白

热门文章

  1. 图文并茂详细教程之——用pixhawk飞控组装一台S500四轴无人机(下)(苍穹四轴)
  2. linux 中etc全拼,英语中“等等”缩写成为etc.吗?要加一点吗?全拼是...
  3. 武田2020财年上半年业绩展示出其产品组合的韧性;确认全年管理层指引,上调对自由现金流、列报营业利润和列报每股盈利的预测
  4. JVM平台上的响应式流(Reactive Streams)规范
  5. Mysql使用大全(MySQL架构与存储引擎 、事务 、业务设计 、索引 、数据结构 、执行计划 、数值类型)
  6. 【Hexo】如何才能在百度搜索到你的博客?SEO优化了解一下(上)
  7. 【数据结构】各种数据结构的简单特点
  8. php curl 小偷,问问小偷无验证码文件(需要空间支持php-curl模块)
  9. Arndale Octa 5420网络设置
  10. ShaderJoy —— 两种瘦脸+大眼特效【附完整参数】【GLSL】