时间轴
时间轴
2025-11-21
init
链表
题目:
题意就是把大于 k 的放前面,小于 k 的放后面,但是大于 k 的那组互相之间相对位置不变,小于 k 的那组互相之间相对位置也不变。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | struct ListNode { int val; ListNode *next; ListNode() : val(0) , next(nullptr) { } ListNode(int x) : val(x) , next(nullptr) { } ListNode(int x, ListNode *next) : val(x) , next(next) { }};class Solution { public: ListNode *partition(ListNode *head, int x) { ListNode *virt_node = new ListNode; virt_node->next = head; ListNode *prev = virt_node, *p, *tmp; while (prev->next != nullptr && prev->next->val < x) { prev = prev->next; //找到第一个大于等于x的前驱结点 } if (prev->next == nullptr) { //all vals < x return head; } p = prev; while (p->next != nullptr) { if (p->next->val < x) { tmp = p->next; p->next = tmp->next; tmp->next = prev->next; prev->next = tmp; prev = tmp; } else { p = p->next; } } head = virt_node->next; delete virt_node; return head; }}; |
