題解 | #鏈表分割#
鏈表分割
http://fangfengwang8.cn/practice/0e27e0b064de4eacac178676ef9c9d70
1. 創(chuàng)建兩個(gè)哨兵結(jié)點(diǎn)guard1,guard2;
2. 遍歷鏈表將數(shù)值小于x的結(jié)點(diǎn)依次連接到guard2后面;其他結(jié)點(diǎn)依次鏈接到guard1后面。
3.最后,將guard1再鏈接到guard2后面
例1:與9比較
例2:與4比較
雖然用的是C++的模塊,但語法都是C的。
class Partition { public: ListNode* partition(ListNode* pHead, int x) { //為原鏈表添加頭結(jié)點(diǎn) guard1 struct ListNode* guard1 = (struct ListNode*)malloc(sizeof(struct ListNode)); assert(guard1); //返回鏈表的頭結(jié)點(diǎn)guard2 struct ListNode* guard2 = (struct ListNode*)malloc(sizeof(struct ListNode)); assert(guard2); struct ListNode* prev = guard1; prev->next = pHead; struct ListNode* cur = pHead; struct ListNode* tail = guard2; while (cur) { if (cur->val < x) { prev->next = cur->next; //cur->next = NULL; tail->next = cur; tail = cur; cur = prev->next; } else { prev = prev->next; cur = cur->next; } } tail->next = guard1->next; return guard2->next; } };