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
.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
此题要考虑特殊情况
比如:
1,2,3,4,5,6 x=10
此种情况要特殊讨论
class Solution {
public :
ListNode *partition(ListNode *head, int x) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ListNode h( 0);
h.next =head;
ListNode * less = &h;
ListNode * p = &h;
while(p - >next !=NULL)
{
if(p - >next - >val <x && less->next->val>=x)//红色为处理特殊情况
{
ListNode *temp =less - >next;
less - >next =p - >next;
p - >next =p - >next - >next;
less - >next - >next =temp;
less =less - >next;
}
else
{
if(p->next->val<x&&less->next->val<x)
less=less->next;
p =p - >next;
}
}
return h.next;
}
};