单链表经典算法 面试题--力扣02.04

 链接:. - 力扣(LeetCode)【点击即可跳转】

思路:创建新链表:大链表和小链表

将pcur节点小于x的值,尾插在小链表中

将pcur节点大于或等于x的值,尾插在大链表中

最终----  return  lessHead->next;

注意:!!!

1.蓝色部分的

greaterTail大链表的尾结点的next指针指向NULL。

否则代码会出现死循环--【超出时间限制】

2.红色箭头部分的

将小链表的尾结点与大链表的第一个有效的 节点首尾相连

lessTail->next=greaterHead->next;

3.判断链表是否为空

代码实现:

typedef  struct ListNode ListNode;
struct ListNode* partition(struct ListNode* head, int x)
{
    if(head==NULL)
    {
        return head;
    }
//创建两个带头链表
 ListNode* lessHead,*greaterHead;
 ListNode* lessTail,*greaterTail;
 lessHead=lessTail=(ListNode*)malloc(sizeof(ListNode));
 greaterHead=greaterTail=(ListNode*)malloc(sizeof(ListNode));
 ListNode* pcur=head; 
//遍历原链表,将原链表中的节点尾插到大小链表中
 while(pcur)
 {
    if(pcur->val<x)
    {        
    //尾插到小链表中
        lessTail->next=pcur;
        lessTail=lessTail->next;
    }
    else
    {
    //尾插到大链表中
        greaterTail->next=pcur;
        greaterTail=greaterTail->next;
    }
    pcur=pcur->next;
 }
 greaterTail->next=NULL;
//大链表尾节点的next指针指向NULL(重要)

lessTail->next=greaterHead->next;
//小链表的尾结点与大链表的第一个有效的节点首尾相连

ListNode* ret=lessHead->next;
 free(lessHead);  //手动释放掉(也可不写)
 free(greaterHead);
 lessHead=greaterHead=NULL;
return ret;
}

感谢观看,如果对你有所帮助的话,点赞支持一下吧^.^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值