设计一个算法,将一个头结点为A的单链表(其数据域为整数)分解成两个单链表A和B,使得A链表只含有原来链表中data域为奇数的结点,而B链表只含有原链表中data域为偶数的结点,且保持·原来的相对顺序。
#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode* next;
}LNode;
void split(LNode* A, LNode*& B)
{
LNode* p, * q, * r;
B = (LNode*)malloc(sizeof(LNode));
B->next = NULL;
r = B;
p = A;
while (p->next!=NULL)
{
if (p->next->data % 2 == 0)
{
q = p->next;
p->next = q->next;
q->next = NULL;
r->next = q;
r = q;
}
else
p = p->next;
}
}
//建表函数
void createList(LNode*& head, int arr[], int n)
{
head = (LNode*)malloc(sizeof(LNode));
head->next = NULL;
LNode* r = head;
for (int i = 0; i < n; ++i)
{
LNode* p = (LNode*)malloc(sizeof(LNode));
p->data = arr[i];
p->next = NULL;
r->next = p;
r = p;
}
}
//打印列表的函数
void printList(LNode* L)
{
LNode* p;
p = L->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main()
{
int a[] = { 1,2,3,4,5,6 };
LNode* A, * B;
createList(A,a,6);
split(A, B);
printList(A);
printList(B);
}