【2002】单链表划分

本文介绍了一种算法,该算法将一个包含整数元素的单链表L分割成两个链表L1和L2。L1包含L中所有值小于其序号的元素,而L2则包含所有值不小于其序号的元素,同时保持原始链表L不变。通过C语言实现,展示了如何在遍历链表的同时创建两个新的链表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值