力扣刷题:11-分隔链表(86)

101 阅读1分钟

给定一个特定的值,和一个链表,使这个链表中小于特定值的节点在左边,大于等于特定值的节点在右边。这道题我们可以先分别构造小于特定值的链表,和一个大于等于特定值的链表,然后,将两个链表连接成为一个链表,就达到了题目要求的链表结构。

下面是C语言实现的代码:

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

struct ListNode* partition(struct ListNode* head, int x){
    struct ListNode left = {
        .val = 0,
        .next = NULL
    }, right = {
        .val = 0,
        .next = NULL
    };
    struct ListNode *leftP = &left, *rightP = &right;

    while (head) {
        if (head->val < x) {
            leftP->next = head;
            leftP = head;
        } else {
            rightP->next = head;
            rightP = head;
        }
        head = head->next;
    }
    leftP->next = right.next;
    rightP->next = NULL;
    return left.next;
}