#include <stdio.h> #include <stdlib.h>

typedef struct ListNode { int val; struct ListNode* next; } ListNode;

ListNode* separateList(ListNode* A) { ListNode* B = NULL; ListNode* C = NULL; ListNode* curA = A; ListNode* curB = NULL; ListNode* curC = NULL;

while (curA != NULL) {
    if (curA->val < 0) {
        if (B == NULL) {
            B = curA;
            curB = B;
        } else {
            curB->next = curA;
            curB = curB->next;
        }
    } else {
        if (C == NULL) {
            C = curA;
            curC = C;
        } else {
            curC->next = curA;
            curC = curC->next;
        }
    }
    
    curA = curA->next;
}

if (curB != NULL) {
    curB->next = NULL;
}

if (curC != NULL) {
    curC->next = NULL;
}

return B;

}

int main() { // 创建链表A,假设A为 1 -> -2 -> 3 -> -4 -> 5 -> NULL ListNode* A = (ListNode*)malloc(sizeof(ListNode)); A->val = 1; A->next = (ListNode*)malloc(sizeof(ListNode)); A->next->val = -2; A->next->next = (ListNode*)malloc(sizeof(ListNode)); A->next->next->val = 3; A->next->next->next = (ListNode*)malloc(sizeof(ListNode)); A->next->next->next->val = -4; A->next->next->next->next = (ListNode*)malloc(sizeof(ListNode)); A->next->next->next->next->val = 5; A->next->next->next->next->next = NULL;

ListNode* B = separateList(A);

// 输出链表B
ListNode* curB = B;
while (curB != NULL) {
    printf('%d ', curB->val);
    curB = curB->next;
}
printf('

');

// 输出链表C
ListNode* curC = A;
while (curC != NULL) {
    printf('%d ', curC->val);
    curC = curC->next;
}
printf('

');

// 释放链表A和B的内存
curC = A;
while (curC != NULL) {
    ListNode* temp = curC;
    curC = curC->next;
    free(temp);
}

curB = B;
while (curB != NULL) {
    ListNode* temp = curB;
    curB = curB->next;
    free(temp);
}

return 0;

}

C语言单链表分解:将非零整数序列分解为两个子链表

原文地址: https://www.cveoy.top/t/topic/si8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录