Cover image for 面试经典150题 P86 分割链表

面试经典150题 P86 分割链表


时间轴

时间轴

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;	}};
评论加载中…