数据结构代码综合题 线性表 43-6

题目

设c={a1,b1,a2,b2,.......,an,bn}为线性表,采用头结点的单链表存放,设计一个就地算法,将其拆分为两个线性表,使得A={a1,a2,.......,an},B={bn,........b2,b1}.

思路

从前往后遍历,A正序尾插法(直接在c中挪走B的元素得到A),B逆序头插法(把B的元素头插到另一个链表中)。设置三个指针*r用于指向p的前一个元素,*p指向当前元素,*q防止断链。

#include<bits/stdc++.h>
using namespace std;
typedef struct lnode{
	int data;
	struct lnode *next;
}lnode,*linklist;
int a[10]={1,2,3,4,5,6,7,8,9,10};
int n=10;
void buildlist(linklist &l,int a[],int n){
	l=(linklist)malloc(sizeof(lnode));
	lnode *s,*r=l;
	for(int i=0;i<n;i++){
		s=(lnode *)malloc(sizeof(lnode));
		s->data=a[i];
		r->next=s;
		r=r->next;
	}
	r->next=NULL;
}
void print(linklist l){
	lnode *p=l->next;
	while(p){
		cout<<p->data<<" ";
		p=p->next;
	}
	cout<<endl;
}

void cutlist(linklist &l1,linklist &l2){
	l2=(linklist)malloc(sizeof(lnode));
	l2->next=NULL;
	lnode *p=l1->next,*q,*r=l1;
	while(p){
		r->next=p;
		r=r->next;
		p=p->next;
		if(p!=NULL){     //处理bn 
			q=p->next;
		}
		p->next=l2->next; //头插 同时删掉了bn 
		l2->next=p;
		p=q;
	}
	r->next=NULL;
}


int main(){
	linklist l1,l2;
	buildlist(l1,a,n);
	print(l1);
	cutlist(l1,l2);
	print(l1);
	print(l2);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值