链表分割

来源:互联网 发布:捷速pdf文字识别软件 编辑:程序博客网 时间:2024/06/06 19:29

题目描述

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前

给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变

--------------------------------------------------------------

扫描一遍链表,将小于x的节点和不小于x的节点分别添加到一个新建链表中,最后做连接。


/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) : val(x), next(NULL) {}};*/class Partition {public:    ListNode* partition(ListNode* pHead, int x) {        ListNode* lshead = nullptr;        ListNode* lstail = nullptr;        ListNode* gthead = nullptr;        ListNode* gttail = nullptr;        ListNode* pcur = nullptr;        while (pHead){            pcur = pHead->next;            pHead->next = nullptr;            if (pHead->val < x){                if (!lshead){                    lshead = pHead;                    lstail = pHead;                }else {                    lstail->next = pHead;                    lstail = pHead;                }            }else {                if (!gthead){                    gthead = pHead;                    gttail = pHead;                }else {                    gttail->next = pHead;                    gttail = pHead;                }            }            pHead = pcur;        }        if (gttail)            gttail->next = nullptr;        if (lstail)            lstail->next = gthead;        else            lshead = gthead;                 return lshead;    }};


0 0
原创粉丝点击