Total Accepted: 60658
Total Submissions: 208869
Difficulty: Medium
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2
and x = 3,
return 1->2->2->4->3->5
.
我的AC(0ms,最快一批):
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* partition(struct ListNode* head, int x) {
if(!head || !head->next) return head;
struct ListNode *small, *big, *smallHead, *bigHead;
small = smallHead = (struct ListNode*)malloc(sizeof(struct ListNode));//为表头指针开辟空间,即起始点。
big = bigHead = (struct ListNode*)malloc(sizeof(struct ListNode));
while(head){
if(head->val < x)
small = small->next = head;
else
big = big->next = head;
head = head->next;
}
big->next = NULL;
small->next = bigHead->next;
return smallHead->next;
}