问题描述:原文链接
分析:这道题其实比较简单,主要思想是维护两个链表,一个比x小的链表,一个大的链表,最后这两个链表结合起来,时间复杂度为O(n),空间复杂度为O(1)。
代码如下:4ms
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* partition(struct ListNode* head, int x) {
if(!head)
return head;
struct ListNode *leftHead = NULL;
struct ListNode *rightHead = NULL;
struct ListNode *left = leftHead;
struct ListNode *right = rightHead;
struct ListNode *cur = head;
while(cur){
struct ListNode *nextCur = cur->next;
if(cur->val < x){
if(!left){
leftHead = cur;
}else
left->next = cur;
left = cur;
left->next = NULL;
}else{
if(!right)
rightHead = cur;
else
right->next = cur;
right = cur;
right->next = NULL;
}
cur = nextCur;
}
if(leftHead){
head = leftHead;
left->next = rightHead;
}else{
head = rightHead;
}
return head;
}