美文网首页
026-partition list

026-partition list

作者: Woodlouse | 来源:发表于2020-06-02 22:08 被阅读0次

描述

在一个单链表中,给定一个值X,根据X将链表分割成两部分,小于X的节点在大于等于X节点的左面。

在分割成的两部分要保持数据相对位置不变。

输入:

​ 1->4->3->2->5->2

输出:

​ 1->2->2->4->3->5

分析

定义两个链表,一个存放节点值小于X值的节点,另一个存放节点值大于等于X值的节点。遍历原始链表,将每个节点从原始链表中拆除,根据以上规则分别存放到对应的链表。

实现

ListNode* partition(ListNode* head, int x)
{
    ListNode hLeft(-1);
    ListNode hRight(-1);
    
    ListNode *pCurLeft = &hLeft;
    ListNode *pCurRight = &hRight;
    
    for(ListNode *cur=head; cur; cur=cur->next) {
        if (cur->val < x) {
            pCurLeft->next = cur;
            pCurLeft = cur;
        }
        else {
            pCurRight->next = cur;
            pCurRight = cur;
        }
    }
    pCurLeft->next = hRight.next;
    pCurRight->next = nullptr;
    
    return hLeft.next;
}

时间复杂度O(n),空间复杂度O(1)


代码在这儿

相关文章

网友评论

      本文标题:026-partition list

      本文链接:https://www.haomeiwen.com/subject/qoxmzhtx.html