目录
1.原题链接:
2.双指针:
对于本题,我们要分割链表,可以先创建两个虚拟头结点,通过遍历链表,把小于x的放在一个链表里面,大于等于x的放在一个链表里面(注意:没有让大于x的一定放在x后面),然后将两个链表连接起来就可以了。
当我们遍历完链表,会发现大于等于x所在的链表的结果会存在问题,因为原来的链表最后面的结点不一定就大于x,所以要做特殊处理,让big->next=NULL。
这样,我们只需将两个链表连接起来就可以了。
代码实现:
typedef struct ListNode ListNode;
struct ListNode* partition(struct ListNode* head, int x){
//创建两个虚拟头结点
ListNode* smallHead = (ListNode*)malloc(sizeof(ListNode));
ListNode* bigHead = (ListNode*)malloc(sizeof(ListNode));
//用两个指针帮助连接
ListNode*small=smallHead;
ListNode* big=bigHead;
while(head!=NULL)
{
if(head->val<x)
{
small->next=head;
small=small->next;
}
else
{
big->next=head;
big=big->next;
}
head=head->next;
}
//处理特殊情况
big->next=NULL;
small->next=bigHead->next;
return smallHead->next;
}
3.提交结果:
4.读书分享:
《道德经·第四十三章》:
天下之至柔,驰骋天下之至坚。无有入无间。
解释:只有天下最柔的东西,才能穿透天下最坚硬的东西。空虚无形之物,可以进入没有间隙的东西之中。