美文网首页
86. 分隔链表

86. 分隔链表

作者: fengup | 来源:发表于2019-08-18 17:04 被阅读0次

双指针法:

直觉
我们可以用两个指针pbig 和 psmall 来追踪上述的两个链表。两个指针可以用于分别创建两个链表,然后将这两个链表连接即可获得所需的链表。

算法
利用cur指针遍历原链表。若cur 指针指向的元素值 小于 x,该节点应当是 psmall 链表的一部分。因此我们将其移到 psmall 中。否则,该节点应当是pbig 链表的一部分。因此我们将其移到 pbig 中。

遍历完原有链表的全部元素之后,我们得到了两个链表 psmall 和 pbig。原有链表的元素或者在psmall 中或者在 pbig 中,这取决于它们的值。

现在,可以将 psmall 和 pbig 连接,组成所求的链表。

为了算法实现更容易,我们使用了哑结点初始化。不能让哑结点成为返回链表中的一部分,因此在组合两个链表时需要向前移动一个节点。

注意:pbig->next需要置空。

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


struct ListNode* partition(struct ListNode* head, int x){
    struct ListNode* cur = head;
    struct ListNode bigdummy;
    struct ListNode smalldummy;
    bigdummy.next = head;
    smalldummy.next = head;
    
    struct ListNode *psmall, *pbig;
    psmall = &smalldummy;
    pbig = &bigdummy;
    if(head == NULL || head->next == NULL)
        return head;
    while(cur != NULL){
        if(cur->val < x){
            psmall->next = cur;
            psmall = psmall->next;

        }else{
            pbig->next = cur;
            pbig = pbig->next;    
        }
        
        cur = cur->next;   
    }
    
    pbig->next = NULL;
    psmall->next = bigdummy.next;
    
    return smalldummy.next;
}



相关文章

  • 86. 分隔链表

    86. 分隔链表[https://leetcode-cn.com/problems/partition-list/...

  • 86. 分隔链表

    86. 分隔链表[https://leetcode.cn/problems/partition-list/] 给你...

  • 力扣每日一题:86.分隔链表 创建大小链表与寻找第一个链表头两种

    86.分隔链表[https://leetcode-cn.com/problems/partition-list/s...

  • 86. 分隔链表

    86. 分隔链表 问题 给定一个链表和一个特定值 ,对链表进行分隔,使得所有小于 的节点都在大于或等于的节点之前。...

  • 86. 分隔链表

    双指针法: 直觉我们可以用两个指针pbig 和 psmall 来追踪上述的两个链表。两个指针可以用于分别创建两个链...

  • 86. 分隔链表

    原题 https://leetcode-cn.com/problems/partition-list/submis...

  • 86. 分隔链表

    https://leetcode-cn.com/problems/partition-list/solution/...

  • 86. 分隔链表

    给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或...

  • LeetCode 86. 分隔链表

    86. 分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点...

  • 每日一题2. 分隔链表

    86. 分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点...

网友评论

      本文标题:86. 分隔链表

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