86. Partition List
来源:互联网 发布:ACER windows激活 编辑:程序博客网 时间:2024/06/09 17:07
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2
and x = 3,
return 1->2->2->4->3->5
.
大意:对链表进行一次划分,小的在前面,大的在后面。
给快排的partition披上了链表的伪装。
快排中的划分可以用swap来实现:
int partition(int a[],int low,int high) { int x=a[high]; int i=low-1;//用以记录位置,<=i的情况都比 x小 for(int j=low;j<high;++j){ if(a[j]<=x){ swap(a[j],a[++i]); } } swap(a[i+1],a[high]); return i+1; }
链表的不适合用swap
最开始能想到的就是构建两个链表:小于x的一个;大于等于x的一个。
解题代码如下:
class Solution {public: ListNode* partition(ListNode* head, int x) { ListNode* small=new ListNode(0); ListNode* big=new ListNode(0); auto p1=small; auto p2=big; while(head){ int y=head->val; if(y<x){ small->next=new ListNode(y); small=small->next; } else{ big->next=new ListNode(y); big=big->next; } head=head->next; } small->next=p2->next; return p1->next; }};
写的太啰嗦了,discuss的简练版本,精炼的不止一点。
class Solution {public: ListNode *partition(ListNode *head, int x) { ListNode node1(0), node2(0); ListNode *p1 = &node1, *p2 = &node2; while (head) { if (head->val < x) p1 = p1->next = head; else p2 = p2->next = head; head = head->next; } p2->next = NULL; p1->next = node2.next; return node1.next; }};
0 0
- [LeetCode]86.Partition List
- LeetCode 86. Partition List
- [Leetcode] 86. Partition List
- LeetCode --- 86. Partition List
- 86. Partition List
- [leetcode] 86.Partition List
- [leetcode] 86. Partition List
- 86. Partition List
- [LeetCode]86. Partition List
- 86. Partition List
- 86. Partition List LeetCode
- 86. Partition List
- 86. Partition List
- 86. Partition List
- Leetcode 86. Partition List
- LeetCode *** 86. Partition List
- LeetCode 86. Partition List
- [LeetCode]86. Partition List
- Xcode8.1不支持ios6.1真机
- 设计模式之工厂模式
- 基础知识:android 数据存储--->文件存储
- java中dynamic web project与web project 的区别
- SQL(十五)-Join类型
- 86. Partition List
- Bootstrap3 栅格系统-实例:从堆叠到水平排列
- JS判断浏览器,考虑版本
- Java基础-集合框架8 Arrays
- Thead 1 概述
- Codeforces 510D. Fox And Jumping By Assassin 暴力大法好
- matlab上使用libsvm
- 如何解决设计器无法选择授权问题
- node 登录拦截跳转,中间件使用和理解