牛客網 程式設計題 鍊錶分割

2021-10-19 17:23:44 字數 1221 閱讀 2935

現有一鍊錶的頭指標 listnode* phead,給一定值x,編寫一段**將所有小於x的結點排在其餘結點之前,且不能改變原來的資料順序,返回重新排列後的鍊錶的頭指標。

解這道題目,最重要的是建立兩個鍊錶,將小於x的結構體放到乙個鍊錶lesshead,大於x的結構體放到另乙個鍊錶greaterhead。最後將兩個鍊錶進行合併。

最後切記,一定要將greatertail->next置為空,保證不會出現以下情況:

/*

struct listnode

};*/

class partition

//1、建立兩個鍊錶

listnode* lesshead,

*lesstail;

listnode* greaterhead,

*greatertail;

lesshead = lesstail =

(listnode*

)malloc

(sizeof

(listnode));

greaterhead = greatertail =

(listnode*

)malloc

(sizeof

(listnode));

lesshead->next = greaterhead->next =

null

;//2、對原鍊錶每個結構體對應的val值與x值進行比較,小於x的放到lesshead為頭指標的鍊錶中,大於x的放到greaterhead為頭指標的鍊錶之中。每回遍歷,lesstail和greatertail都指向其下乙個。

listnode* cur = phead;

while

(cur)

else

cur = cur->next;

}//3、合併兩個鍊錶

lesstail->next = greaterhead->next;

greatertail->next =

null

; listnode* list = lesshead->next;

free

(lesshead)

;free

(greaterhead)

;return list;}}

;

牛客網 鍊錶分割

編寫 以給定值x為基準將鍊錶分割成兩部分,所有小於x的結點排在大於或等於x的結點之前。給定乙個鍊錶的頭指標 listnode phead,請返回重新排列後的鍊錶的頭指標。注意 分割以後保持原來的資料順序不變。設定兩個鍊錶,將小於x的結點放在乙個鍊錶中,大於等於x的結點放在另乙個鍊錶中,然後合併兩個鍊...

牛客網 程式設計題 回文鍊錶

現給定乙個鍊錶listnode phead,定義bool代表鍊錶是否為回文,請編寫程式。返回 true 返回 false 本題的思路分為三步走 找尋中間位置 將鍊錶分為兩部分,對後一部分進行翻轉 進行指標指向資料的比較。1 找尋中間位置 找尋中間位置,還是運用快慢指標的思想,具體細節參考我的之前有一...

牛客網練習 鍊錶分割

編寫 以給定值x為基準將鍊錶分割成兩部分,所有小於x的結點排在大於或等於x的結點之前 給定乙個鍊錶的頭指標 listnode phead,請返回重新排列後的鍊錶的頭指標。注意 分割以後保持原來的資料順序不變。一看到這道題我就想到了建立兩個鍊錶的想法,乙個鍊錶放小於指定x的所有節點,另乙個放大於等於的...