leetcode---链表分割

描述:
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

牛客网代码(我不理解为什么不能在leetcode上报错,555,可能因为leetcode的测试用例更多吧!!!所以稍微改动一下见下面的一段代码):

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        //申请两个链表的头尾结点
        struct ListNode *lessHead,*lessTail,*moreHead,*moreTail;
        //头结点为哨兵结点,所以开辟内存
        lessHead=lessTail=(struct ListNode*)malloc(sizeof(struct ListNode));
        lessTail->next=NULL;
        moreHead=moreTail=(struct ListNode*)malloc(sizeof(struct ListNode));
        moreTail->next=NULL;
        
        //定义链表中的一个指针
        struct ListNode *cur=pHead;
        while(cur){
            if(cur->val<x){ //当链表中的结点小于x的时候
                lessTail->next=cur;
                lessTail=cur;
                cur=cur->next;
            }
            else{
                moreTail->next=cur;
                moreTail=cur;
                cur=cur->next;
            }
        }
        lessTail->next=moreHead->next;
        free(moreHead);
        moreTail->next=NULL;
        
        struct ListNode *list=lessHead->next;
        free(lessHead);
        return list;
    }
};

leetcode代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* partition(struct ListNode* head, int x){
    //定义两个链表
    struct ListNode *lessHead,*lessTail,*moreHead,*moreTail;
    lessHead=(struct ListNode*)malloc(sizeof(struct ListNode));
    lessTail=(struct ListNode*)malloc(sizeof(struct ListNode));
    lessTail->next=NULL;
    lessHead=lessTail;
    
    moreHead=(struct ListNode*)malloc(sizeof(struct ListNode));
    moreTail=(struct ListNode*)malloc(sizeof(struct ListNode));
    moreTail->next=NULL;
    moreHead=moreTail;

    /*if(head==NULL){
        return head;
    }*/
    struct ListNode* cur=head;
    while(cur){
        if(cur->val<x){
            lessTail->next=cur;
            lessTail=cur;
        }
        else{
            moreTail->next=cur;
            moreTail=cur;
        }
        cur=cur->next;
    }
    moreTail->next=NULL;
    lessTail->next=moreHead->next;
    free(moreHead);
    struct ListNode *list=lessHead->next;
    free(lessHead);
    return list;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值