1.問題描述:
給定一個單鏈表和數值x,劃分鏈表使得所有小於x的節點排在大於等於x的節點之前。
你應該保留兩部分內鏈表節點原有的相對順序
2.解題思路:
先創建兩個節點,從開始遍歷鏈表判斷節點的值與x的大小,分別存放將比x大和小的節點,最後將兩個鏈表連起來。
3.
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
ListNode *partition(ListNode *head, int x) {
ListNode * small = new ListNode(0); //小於x
ListNode * large = new ListNode(0); //大於x
ListNode * lastSmall = small,* lastLarge = large;
ListNode * cur = head;
while(cur){
if(cur->val < x){
lastSmall->next = cur;
lastSmall = lastSmall->next;
}else{
lastLarge->next = cur;
lastLarge = lastLarge->next;
}
cur = cur->next;
lastSmall->next = lastLarge->next = NULL;
}
lastSmall->next = large->next;
return small->next;
}
};
4 感想:這是老師剛開始佈置作業的那天我晚上看的一道題,在宿舍裏看了一晚上,即使老師講過我還是不明白,就是因爲自己的基礎太差了,想自己寫就是寫不出來,最後一着急就從網上搜了答案,也沒看就複製粘貼上,沒想就那麼過了,但是當時心裏就很不喜歡這樣感覺,覺得對自己根本沒有提高,所以我就把代碼抄下來,自己找時間來搞懂這個思想,自己現在搞懂了,就來寫了這篇博客。自己調通一個程序纔會有真正的進步,自己還是要一步一個腳印來學習,不能急於求成。