C语言单链表分解:将非零整数序列分解为两个子链表
#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;
}
原文地址: https://www.cveoy.top/t/topic/si8 著作权归作者所有。请勿转载和采集!