lintCode 96 鍊錶劃分

2021-08-14 22:29:55 字數 975 閱讀 4896

題目本身難度不到,只想講一些關於鍊錶的操作。這裡看了幾篇部落格,寫得好的使用了乙個小技巧

在新鍊錶list的頭部多分配了乙個節點的空間,從而簡化了接下來對於鍊錶的操作,這又什麼好處呢?最後返回的的時候,返回list->next就行,然而由於這個新鍊錶具有自己的資料空間因此,就可以在這個新煉表上直接操作,省略了通過判斷,從而給新鍊錶賦值的過程,簡化了操作,這個確實是個很好的小技巧。

思路:我首先的思路是通過兩個vectorless,great,如果比較的結果小,就放入less,否則放入great,最後從less開始,依次取出vector裡面的元素,然後將它們連在一起、很顯然,一是耗用的記憶體更多了,二是多了很多的判斷,比如要判斷less是否為空,同時如何將less最後乙個節點和great第乙個節點相連,很顯然,多了很多判斷及要考慮的情況。按這種思路寫一遍就知道了。

而採用技巧的話,通過乙個標記flag和乙個游標cur,flag指向新鍊錶當前最後乙個元素,cur則尋找鍊錶中比引數小的元素,沒發現乙個就把它flag之後,同時flag後移(point:注意這裡的指標連線操作,建議手寫一遍理一下),這樣好處很明顯,首先由於新煉表有自己的空間(其實新鍊錶就只分配了頭結點的空間),那麼一開始也不用判斷頭節點到底應該是從**開始,可以一開始就開始對原來鍊錶的處理工作;第二個就是後續的操作在原來鍊錶上進行就可以,在內部調整順序。

問題描述:

給定乙個單鏈表和數值x,劃分鍊錶使得所有小於x的節點排在大於等於x的節點之前。

你應該保留兩部分內煉表節點原有的相對順序。

樣例

給定鍊錶 1->4->3->2->5->2->null

,並且 x=3

返回1->2->2->4->3->5->null

**:

class solution 

else

}return front->next;

}};

ps:注意編碼的細節以及效率,以較少的提交次數通過

lintcode 96 鍊錶劃分

1.給定乙個單鏈表和數值x,劃分鍊錶使得所有小於x的節點排在大於等於x的節點之前。你應該保留兩部分內煉表節點原有的相對順序。2.完全沒有思路.3.definition of listnode class listnode class solution else cur cur next lastsm...

一次過 Lintcode 96 鍊錶劃分

給定乙個單鏈表和數值x,劃分鍊錶使得所有小於x的節點排在大於等於x的節點之前。你應該保留兩部分內煉表節點原有的相對順序。給定鍊錶1 4 3 2 5 2 null,並且 x 3 返回1 2 2 4 3 5 null 可將整個鍊錶先分離為兩個小的鍊錶。我們建立minlist和maxlist,分別儲存小於...

LintCode 鍊錶劃分

容易 鍊錶劃分 檢視執行結果 29 通過 給定乙個單鏈表和數值x,劃分鍊錶使得所有小於x的節點排在大於等於x的節點之前。你應該保留兩部分內煉表節點原有的相對順序。您在真實的面試中是否遇到過這個題?yes 樣例 給定鍊錶 1 4 3 2 5 2 null,並且 x 3 返回 1 2 2 4 3 5 n...