Lintcode 76.鏈表劃分

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 感想:這是老師剛開始佈置作業的那天我晚上看的一道題,在宿舍裏看了一晚上,即使老師講過我還是不明白,就是因爲自己的基礎太差了,想自己寫就是寫不出來,最後一着急就從網上搜了答案,也沒看就複製粘貼上,沒想就那麼過了,但是當時心裏就很不喜歡這樣感覺,覺得對自己根本沒有提高,所以我就把代碼抄下來,自己找時間來搞懂這個思想,自己現在搞懂了,就來寫了這篇博客。自己調通一個程序纔會有真正的進步,自己還是要一步一個腳印來學習,不能急於求成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章