题解 | #链表分割#

链表分割

https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        /*思路:小于的跟着一个哨兵头,非小于的跟着另一个哨兵头,第一个哨兵头的结尾连着另外一个哨兵头的next,*/
        ListNode* guard = (ListNode*)malloc(sizeof(ListNode));/*两个哨兵头,分别代表小于x和不小于x的哨兵头*/
        ListNode* guard2 = (ListNode*)malloc(sizeof(ListNode));
        guard->next = NULL;
        guard2->next = NULL;
        ListNode* guard_cur = guard;/*统计小于x的节点*/
        ListNode* guard_cur2 = guard2;/*统计不小于x的节点*/
        ListNode* cur = pHead;/*统计所有节点*/
        while(cur)
        {
            if(cur->val < x)
            {
                guard_cur->next = cur;
                guard_cur = guard_cur->next;
            }
            else
            {
                guard_cur2->next = cur;
                guard_cur2 = guard_cur2->next;
            }
            cur = cur->next;
        }
        guard_cur->next = NULL;
        guard_cur2->next = NULL;
        guard_cur->next = guard2->next;
        pHead = guard->next;
        free(guard);
        free(guard2);
        return pHead;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务