题目:给定一个链表和一个数x,将链表中比x小的放在前面,其他的放在后头。例如:

Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

思路:

1. 再用两个node,一个指向所有小于x的,一个指向其他的,之后把两个接在一起。接在一起需要注意large是否未移动过。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *partition(ListNode *head, int x)
{
if (head == NULL || head -> next == NULL) return head;
ListNode *ans_small = new ListNode(); // 存小于x的
ListNode *ans_large = new ListNode(); // 存不小于x的
ans_small -> next = head;
ans_large -> next = head;
ListNode *small = ans_small;
ListNode *large = ans_large;
ListNode *cur = head; while(cur)
{
if (cur -> val < x)
{
small -> next = cur;
small = cur;
cur = cur -> next;
}
else
{
large -> next = cur;
large = cur;
cur = cur -> next;
}
}
large -> next = NULL; // 这个是为了防止large指向head的时候
small -> next = ans_large -> next;
head = ans_small;
delete ans_small, ans_large;
return head -> next;
}
};

2. 就创建一个node,这个node遇见比x小的就插入

class Solution {
public:
ListNode *partition(ListNode *head, int x)
{
if (head == NULL || head -> next == NULL) return head;
ListNode *ans = new ListNode();
ans -> next = head;
ListNode *small = ans; // 在它的后面插入小的
ListNode *cur = head;
ListNode *pre = ans; // cur的前一个指针,方便插入操作
bool flag = true; // true说明要插入的紧接着就是下一个,那就不用插入,加加就好
while(cur != NULL)
{
if (cur -> val < x && small -> next == cur) // 待插入的和之前小的相邻就不用插入了
{
pre = pre -> next;
cur = cur -> next;
small = small -> next;
}
else if (cur -> val < x && small -> next != cur) // 不相邻,插入
{
ListNode *tmpnext = small -> next;
small -> next = cur;
small = cur;
cur = cur -> next;
small -> next = tmpnext;
pre -> next = cur;
flag = true;
}
else if (cur -> val >= x)
{
flag = false;
cur = cur -> next;
pre = pre -> next;
}
}
head = ans;
delete ans;
return head -> next;
}
};

从第二个思路中知道了原来可以判断连个node是否相等!这个之前以为不能那样判断的,原来可以用 if(node1 == node2)。多学一个知识点了。

leetcode[87] Partition List的更多相关文章

  1. LeetCode: Palindrome Partition

    LeetCode: Palindrome Partition Given a string s, partition s such that every substring of the partit ...

  2. LeetCode 87,远看是字符串其实是搜索,你能做出来吗?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第54篇文章,我们一起来看LeetCode 87题,Scramble String(爬行字符串). 这题的官方难度 ...

  3. [LeetCode] 915. Partition Array into Disjoint Intervals 分割数组为不相交的区间

    Given an array A, partition it into two (contiguous) subarrays left and right so that: Every element ...

  4. [LeetCode] 763. Partition Labels 分割标签

    A string S of lowercase letters is given. We want to partition this string into as many parts as pos ...

  5. [LeetCode] 416. Partition Equal Subset Sum 相同子集和分割

    Given a non-empty array containing only positive integers, find if the array can be partitioned into ...

  6. [LeetCode] 87. Scramble String 搅乱字符串

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  7. LeetCode 1043. Partition Array for Maximum Sum

    原题链接在这里:https://leetcode.com/problems/partition-array-for-maximum-sum/ 题目: Given an integer array A, ...

  8. [LeetCode] 86. Partition List 划分链表

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  9. leetcode 86. Partition List

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

随机推荐

  1. AndroidUI组件之TabHost

    package com.gc.tabhost; /** * @author Android将军 * * * * 1.TabHost是一种非常有用的组件,TabHost能够非常方便地在窗体上放置 * 多 ...

  2. Javascript设计模式与开发实践读书笔记(1-3章)

    第一章 面向对象的Javascript 1.1 多态在面向对象设计中的应用   多态最根本好处在于,你不必询问对象“你是什么类型”而后根据得到的答案调用对象的某个行为--你只管调用行为就好,剩下的一切 ...

  3. MIFARE系列7《安全》

    飞利浦的MIFARE卡因为它的高安全性在市场上得到广泛应用,比方我们乘车用的公交卡,学校和企业食堂的饭卡等等.它每一个扇区有独立的密匙(6个字节的password),在通信过程中首先要验证密匙才干读写 ...

  4. Python 目录操作(转)

    在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回当前 ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据 ...

  6. Java数据结构系列——简单排序:泡、选择、直接进入

    package SimpleSort; public class SimpleSort { /** * 冒泡排序:每次循环过程中.小的排在后面的数会像水中的 * 气泡一样慢慢往上冒,所以命名为冒泡排序 ...

  7. MySql创建一个存储过程

    MySQL 存储过程是从 MySQL 5.0 新功能.存储过程的长处有一箩筐.只是最基本的还是运行效率和SQL 代码封装. 特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库时(比如 ...

  8. javascript利用map,every,filter,some,reduce,sort对数组进行最优化处理

    案例: var scoresTable=[ {id:11,name:"小张",score:80}, {id:22,name:"小王",score:95}, {i ...

  9. centos6.5 x86_64安装oracle 11.2.0.3grid

     centos6.5 x86_64安装oracle 11.2.0.3grid 1.安装前的准备 工作 1.1.配置node1 1.1.1.配置虚拟机并安装centos 安装node1----- 1 ...

  10. Sicily 1732 Alice and Bob (二进制最大公约数)

    联系: http://soj.me/1732 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description: Alice is a b ...