LeetCode 之 Partition List — C++ 实现
2015-06-13 17:20
399 查看
Partition List
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
return
给定一个链表和一个值 x,将其分区使 x 后面的节点值全部大于等于 x。
必须保证原来值的相对顺序。
分析:
从表头开始扫描,小于 x 的值跳过,遇到大于等于 x 的值则向后查找小于 x 的值,然后插入到大于等于 x 值的前面。
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(!head)
{
return NULL;
}
ListNode *tempHead = new ListNode(0);
tempHead->next = head;
ListNode *pre = tempHead, *p = head, *pr = NULL, *cur = NULL;
while(p)
{
if(p->val < x) //val < x, 继续向后搜索
{
pre = pre->next;
p = p->next;
}
else //val > x
{
pr = pre->next; //pr记录 val < x 的前一个节点
p = p->next;
while(p && p->val >= x)
{
pr = pr->next;
p = p->next;
}
if(p)//找到 val < x 的节点
{
pr->next = p->next;
p->next = pre->next;
pre->next = p;
pre = pre->next;
p = pre->next;
}
}
}
head = tempHead->next;
delete tempHead;
return head;
}
};
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->2and x = 3,
return
1->2->2->4->3->5.
给定一个链表和一个值 x,将其分区使 x 后面的节点值全部大于等于 x。
必须保证原来值的相对顺序。
分析:
从表头开始扫描,小于 x 的值跳过,遇到大于等于 x 的值则向后查找小于 x 的值,然后插入到大于等于 x 值的前面。
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(!head)
{
return NULL;
}
ListNode *tempHead = new ListNode(0);
tempHead->next = head;
ListNode *pre = tempHead, *p = head, *pr = NULL, *cur = NULL;
while(p)
{
if(p->val < x) //val < x, 继续向后搜索
{
pre = pre->next;
p = p->next;
}
else //val > x
{
pr = pre->next; //pr记录 val < x 的前一个节点
p = p->next;
while(p && p->val >= x)
{
pr = pr->next;
p = p->next;
}
if(p)//找到 val < x 的节点
{
pr->next = p->next;
p->next = pre->next;
pre->next = p;
pre = pre->next;
p = pre->next;
}
}
}
head = tempHead->next;
delete tempHead;
return head;
}
};
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解
- LeetCode [Day 6] ZigZag Conversion 题解
- LeetCode 2: Add Two Numbers (JAVA)
- LeetCode 1: Two Sum (JAVA)