题外话:
这题是我的leetcode前100题剩下为数不多的题目之一,不知道当初为啥跳过了233333
题目:
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.
Example:
Input: head = 1->4->3->2->5->2, x = 3 Output: 1->2->2->4->3->5
题意解读:
将输入的链表顺序变为小于x的子串连接大于等于x的子串。
代码:
/**
* 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* head1 = NULL, *head2 = NULL, *p = head, *r = NULL, *q = NULL;
while(p != NULL)
{
if(p->val < x)
{
if(head1 == NULL)
{
head1 = p;
r = head1;
}
else
{
r->next = p;
r = r->next;
}
}
else
{
if(head2 == NULL)
{
head2 = p;
q = head2;
}
else
{
q->next = p;
q = q->next;
}
}
p = p->next;
}
if(r != NULL)
r->next = head2;
else
head1 = head2;
if(q != NULL)
q->next = NULL;
return head1;
}
};
结果:
这题思路有些坎坷,前一种想法一直有个bug解不掉。后来重新审题,发现可以用前一题328. Odd Even Linked List的思路同样来解,修改了以下最后的逻辑就AC了!道阻且长啊!
Success!
Runtime: 4 ms, faster than 100.00% of C++ online submissions for Partition List.
Memory Usage: 766 KB, less than 60.00% of C++ online submissions for Partition List.