二.假设有一用单链表实现的线性表L,L中的元素都是整数。
请编写一C函数,将L分为两个线性表L1和L2, L1和L2仍以单链表实现,L保持不变;
L1中的元素由L中所有元素值小于其序号的元素构成,且L1中的元素的相对次序与L中的相应元素的相对次序相同;
L2中的元素由L中所有元素值不小于其序号的元素构成,且L2中的元素的相对次序与L中的相应元素的相对次序相同。(10 分)
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define elemType int
typedef struct LNode{
elemType data;
struct LNode *next;
}LNode;
int cj=1;
void split2(LNode *L, LNode *L1, LNode *L2){
int i=0;//序号从0开始
LNode *r1,*r2,*p,*a;
r1=L1;
r2=L2;
p=L->next;
while(p){
a = (LNode *)malloc(sizeof(LNode));
a->data=p->data;
a->next=NULL;
if(p->data<i){
r1->next = a;
r1=a;
}
else{
r2->next = a;
r2=a;
}
p=p->next;i++;
}
}
int main() {
int i;
elemType a[10] = {0,2,1,4,3,6,4,9,5,11};
LNode *L = (LNode *)malloc(sizeof(LNode));
LNode *L1 = (LNode *)malloc(sizeof(LNode));
LNode *L2 = (LNode *)malloc(sizeof(LNode));//这三个是头节点
LNode *s, *r = L;
for (i = 0; i < 10; i++) {
s = (LNode *)malloc(sizeof(LNode));
s->data = a[i];
s->next = NULL;
r->next = s;
r = s;
}
printf("L: ");
for (s = L->next; s != NULL; s = s->next)
printf("%d ", s->data);
putchar('\n');
split2(L, L1, L2);
printf("L1: ");
for (s = L1->next; s != NULL; s = s->next)
printf("%d ", s->data);
putchar('\n');
printf("L2: ");
for (s = L2->next; s != NULL; s = s->next)
printf("%d ", s->data);
putchar('\n');
return 0;
}