鍊錶分化問題為給定乙個閾值,使得小於等於這個閾值的結點移到前面,大於這個閾值的結點移到後面,同時保證兩類結點的內部位置關係不變。
思路一:把鍊錶元素放到陣列中,利用快排思想進行排序,類似荷蘭國旗問題,但因為涉及到交換,不能保證同一類結點內部位置關係不變。
思路二:將小於等於這個閾值的結點生成乙個鍊錶,大於這個閾值的結點生成乙個鍊錶,最後將兩個鍊錶連在一起即可。
注意事項:
1、每個鍊錶儲存好head和tail指標,以便首尾連線。
2、遍歷到原煉表中的某一結點時,先儲存該結點的next值(後續結點),再將該結點從原鍊錶斷開(設定next值為0)。注意一定要將結點從原始鍊錶中斷開,否則新煉表中會儲存該結點的後續結點資訊。
**實現:
/*
struct listnode
};*/
class divide
else
}else
else
}head = next;
} if (head1 != null)
else
return head2;
}};
鍊錶演算法之鍊錶分化
對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於等於它的結點在前,大於等於它的在後,保證結點值不重複。測試樣例 3 思路 新建兩個鍊...
鍊錶的分化練習
對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於它的結點在前,大於它的在後,d等於它的節點在中間。保證結點值不重複。測試樣例 3 兩...
nowcoder 鍊錶的分化
對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於等於它的結點在前,大於等於它的在後,保證結點值不重複。測試樣例 3 用兩個臨時鍊錶記...