题目描述
解题思路
动画详解
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
struct ListNode* partition(struct ListNode* head, int x)
{
ListNode* lessHead, *lessTail;
ListNode* greatHead,*greatTail;
lessHead = lessTail = (ListNode*)malloc(sizeof(ListNode));
greatHead = greatTail = (ListNode*)malloc(sizeof(ListNode));
ListNode* pcur = head;
while(pcur)
{
if(pcur->val<x)
{
// 插入到小链表中
lessTail->next = pcur;// 这里的思想可以学习一下
lessTail = lessTail->next;
}
else
{
// 插入到大链表中
greatTail->next = pcur;
greatTail = greatTail->next;
}
pcur = pcur->next;
}
// 把大链表的尾部置空,防止出现链表循环
greatTail->next = NULL;
// 大小链表首尾相接
lessTail->next = greatHead->next;
return lessHead->next;
}
注意事项
复杂度分析
总结
💖💖💖非常感谢各位的支持💖💖💖
我们共同进步
本系列持续更新,关注我,带你手撕面试算法题
下期再见