解題思路 :
這題能復習到的地方很多 首先建立兩個 node 一個連接 val < x 的 node 另一個連接 val >= x 的 node 接著掃過 list 一遍把整個 list 用這兩個 node 連接好 最後把小的那邊的尾端連接在大的那邊的 head->next (兩邊的 head 都是 dummy 所以要避開)最後再把大的尾端連接的 node 設定為 nullptr 以確保 list 有乾淨切斷
C++ code :
<pre><code>
class Solution {
public:
/**
* @param head: The first node of linked list.
* @param x: an integer
* @return: a ListNode
*/
ListNode *partition(ListNode *head, int x) {
// write your code here
ListNode *less = new ListNode(0);
ListNode *greater = new ListNode(0);
ListNode *less_cur = less;
ListNode *greater_cur = greater;
while(head)
{
if(head->val < x)
{
less_cur->next = head;
less_cur = less_cur->next;
}
else
{
greater_cur->next = head;
greater_cur = greater_cur->next;
}
head = head->next;
}
less_cur->next = greater->next;
greater_cur->next = nullptr;
return less->next;
}
};
网友评论