143. Reorder List

https://www.cnblogs.com/grandyang/p/4254860.html

先将list的前半段和后半段分开,然后后半段进行逆序,然后再连接

class Solution {
public:
void reorderList(ListNode* head) {
if(head == NULL)
return;
ListNode* p1 = head;
ListNode* p2 = head;
while(p2->next != NULL && p2->next->next != NULL){
p1 = p1->next;
p2 = p2->next->next;
}
p2 = p1->next;
p1->next = NULL;
ListNode* pre = NULL;
while(p2 != NULL){
ListNode* tmp = p2->next;
p2->next = pre;
pre = p2;
p2 = tmp;
}
p1 = head;
p2 = pre;
while(p2 != NULL){
ListNode* tmp1 = p1->next;
ListNode* tmp2 = p2->next;
p1->next = p2;
p2->next = tmp1;
p1 = tmp1;
p2 = tmp2;
}
return;
}
};

86. Partition List

这个题和143有点相似,都是用两个指针,分别表示前面满足条件的最后一个,后面满足条件的最后一个。

但143的p2是只管当前指针,但86题p2是当前指针的前一个指针,因为86题需要判断是否满足小于x的条件,但143则不需要。

主循环那部分,只适合下一个指针大于x的情况,所以先通过一个循环找到第一个大于的x的前一个指针。

注意:要申请一个dummy指针保存最终的链表的返回,head指针也可能被排序排乱。

比如下面这种情况:

Input:
[2,1]
2
Output:
[2]
Expected:
[1,2]

class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head == NULL)
return NULL;
ListNode* dummy = new ListNode(-);
dummy->next = head;
ListNode* pre = dummy;
while(pre->next && pre->next->val < x)
pre = pre->next;
ListNode* cur = pre;
while(cur->next){
if(cur->next->val >= x)
cur = cur->next;
else{
ListNode* tmp = cur->next;
cur->next = tmp->next;
tmp->next = pre->next;
pre->next = tmp;
pre = pre->next;
}
}
return dummy->next;
}
};

leetcode 143. Reorder List 、86. Partition List的更多相关文章

  1. leetcode 143. Reorder List ----- java

    Given a singly linked list L: L0→L1→-→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→- You must do thi ...

  2. Java for LeetCode 143 Reorder List

    Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do th ...

  3. Leetcode#143 Reorder List

    原题地址 先把链表分割成前后两半,然后交叉融合 实践证明,凡是链表相关的题目,都应该当成工程类题目做,局部变量.功能函数什么的随便整,代码长了没关系,关键是清楚,不容易出错. 代码: ListNode ...

  4. Leetcode 143. Reorder List(Medium)

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...

  5. [leetcode]143. Reorder List重排链表

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You may not mod ...

  6. 【LeetCode】143. Reorder List 解题报告(Python)

    [LeetCode]143. Reorder List 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...

  7. 【LeetCode】86. Partition List 解题报告(Python)

    [LeetCode]86. Partition List 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http:// ...

  8. 143. Reorder List - LeetCode

    Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前 ...

  9. LeetCode:分割链表【86】

    LeetCode:分割链表[86] 题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例 ...

随机推荐

  1. KVM虚拟机快照链创建,合并,删除及回滚研究

    1 QEMU,KVM,libvirt关系 QEMU QEMU提供了一个开源的服务器全虚拟化解决方案,它可以使你在特定平台的物理机上模拟出其它平台的处理器,比如在X86 CPU上虚拟出Power的CPU ...

  2. Python Django开发遇到的坑(版本不匹配)

    这个问题 进入django 后台, 添加,修改都不可以,只有删除可以,那么百分之百是这个问题 对照一下,是你的django 版本低了还是 python版本高了,对照的话就没问题了 这个坑,弄了两天啊! ...

  3. VSCode之使用Settings Sync同步配置和插件

    需求背景 自己平常工作,一般在公司用公司的电脑,在家里就是自己的,但是vscode如果配置了新的内容,或者安装了新的插件,那每次都需要单独记录一下然后再重新配置一遍.使用Settings Sync插件 ...

  4. webpack 配置react脚手架(四):路由配置

    1. 由于 react-router 是集成了 react-router-dom 和 react-router-native的一起的,所以这里要使用的是 react-router-dom, 2. 安装 ...

  5. python开发的百度翻译接口

    做的一个python版的百度翻译,附代码 #!/usr/bin/env python # -*- coding:utf-8 -*-   ''' 爬虫之百度翻译 需要的库有 js2py, request ...

  6. 带有EXE参数的启动

    (一).先制作一个带启动参数的EXE文件. 步骤:            1.定义全局私有变量:private string[] s = new string[1];  //这里为了简单起见,只做一个 ...

  7. 深入理解JavaScript之实现继承的7种方式

    1.原型链继承 核心:将父类的实例作为子类的原型 首先,要知道构造函数.原型和实例之间的关系:构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个原型对象的指针. func ...

  8. Second Max of Array

    Find the second max number in a given array. Example Given [1, 3, 2, 4], return 3. Given [1, 2], ret ...

  9. hadoop各版本下载地址

    http://mirror.bit.edu.cn/apache/hadoop/common/

  10. MyBatis底层实现原理: 动态代理的运用

    转载:https://mp.weixin.qq.com/s/_6nyhaWX15mh3mkj8Lb0Zw Mybatis中声明一个interface接口,没有编写任何实现类,Mybatis就能返回接口 ...