对一个链表内数据分出奇偶数放在两个链表中
有一个由整数元素构成的非空单链表A,设计一个算法,将其拆分成两个单链表A和B,使得A单链表中含有所有的偶数节点,B单链表中含有所有的奇数节点,且保持原来的相对次序。
代码:
#include<iostream> #include<stdlib.h> using namespace std; struct list_node { struct list_node* next; int data; }; void list_tail(list_node* L,int n) { list_node* p, * r; r = L; r->data = -1; int a; for (int i = 0;i < n;i++) { p = (list_node*)malloc(sizeof(list_node)); if (p == NULL) return; scanf("%d", &a); p->data = a; r->next = p; r = p; } r->next = NULL; } void printflist(list_node* L) { list_node* q; q = L->next; while (q) { printf("%d ", q->data); q = q->next; } } void jia(list_node* N, list_node* M)//将N data放至M下一个data { list_node* q; q = (list_node*)malloc(sizeof(list_node)); if (q == NULL) return ; M->next = q; q->next = NULL; q->data = N->data; } void chai(list_node* L, list_node* A, list_node* B) { list_node* r, * p, * t; r = A; p = B; t = L; while (t->next) { t = t->next; if (t->data % 2 == 0) { jia(t, r); r = r->next; } else { jia(t, p); p = p->next; } } } int main() { int n; list_node* L; L = (list_node*)malloc(sizeof(list_node)); scanf("%d", &n); list_tail(L, n); printflist(L); puts(""); list_node* A; A = (list_node*)malloc(sizeof(list_node)); list_node* B; B = (list_node*)malloc(sizeof(list_node)); if (A == NULL) return NULL; if (B == NULL) return NULL; A->data = -1; B->data = -1; A->next = NULL; B->next = NULL; chai(L, A, B); printflist(A); puts(""); printflist(B); puts(""); }

浙公网安备 33010602011771号