当前位置: 代码迷 >> 综合 >> 【2002】单链表划分
  详细解决方案

【2002】单链表划分

热度:27   发布时间:2023-11-01 06:49:01.0

二.假设有一用单链表实现的线性表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;
}

 

  相关解决方案