[leetcodeブラシシリーズ]Partition List
1336 ワード
この問題が詰まった--原因は最後に戻ったListNodeの中にリングがあるので、ポインタを書くのはやはり注意しなければならないようですね.もっと問題をして、もっと鍛えてください.
/**
* 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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(head == 0)
return 0;
ListNode * less = 0, *less_cur = 0;
ListNode * bigg = 0, *bigg_cur = 0;
ListNode * p = head;
while(p != 0){
if(p->val < x){
// less
if(less == 0){
less = less_cur = p;
}else{
less_cur->next = p;
less_cur = p;
}
}else{
// bigg
if(bigg == 0){
bigg = bigg_cur = p;
}else{
bigg_cur->next = p;
bigg_cur = p;
}
}
p = p->next;
}
if(less == 0)
return bigg;
if(bigg != 0)
bigg_cur->next = 0;
less_cur->next = bigg;
return less;
}
};