武汉大学数据结构慕课习题
###有一个由整数元素构成的非空单链表A,设计一个算法,将其拆分成两个单链表A和B,使得A单链表中含有所有的偶数节点,B单链表中含有所有的奇数节点,且保持原来的相对次序。
#include <iostream>
#include<stdlib.h>
using namespace std;
/*有一个由整数元素构成的非空单链表A,设计一个算法,
将其拆分成两个单链表A和B,使得A单链表中含有所有的
偶数节点,B单链表中含有所有的奇数节点,且保持原来
的相对次序*/
typedef struct LNode
{
int data;
struct LNode *next;
}linklist;
void initlist(linklist *&L);
linklist* creatlistR(linklist *&L,int a[],int n);
void displist(linklist *L);
void destroylist(linklist *&L);
void divide(linklist *&La);
int main()
{
int i,n;
linklist *L;
initlist(L);
cout<<"输入数据个数n:"<<"\n";
cin>>n;
int a[n];
cout<<"输入数据:"<<"\n";
for(i=0;i<n;i++)
cin>>a[i];
L=creatlistR(L,a,n);
divide(L);
return 0;
}
void initlist(linklist *&L)
{
L=(linklist*)malloc(sizeof(linklist));
L->next=NULL;
}
linklist* creatlistR(linklist *&L,int a[],int n)
{
L=(linklist*)malloc(sizeof(linklist));
linklist *r=L,*s;
int i;
for(i=0;i<n;i++)
{
s=(linklist*)malloc(sizeof(linklist));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
return L;
}
void displist(linklist *L)
{
linklist *p=L->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<"\n";
}
void divide(linklist *&La)
{
linklist *Lb,*p=La->next,*a=La,*b;
Lb=(linklist*)malloc(sizeof(linklist));
b=Lb;
int i=1;
while(p!=NULL)
{
if(i%2==0)
{
a->next=p;
a=p;
}
else
{
b->next=p;
b=p;
}
i++;
p=p->next;
}
a->next=NULL,b->next=NULL;
cout<<"输出链表A数据:"<<"\n";
displist(La);
cout<<"输出链表B数据:"<<"\n";
displist(Lb);
destroylist(La);
destroylist(Lb);
}
void destroylist(linklist *&L)
{
linklist *pre=L,*p=L->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=p->next;
}
free(pre);
}
1564

被折叠的 条评论
为什么被折叠?



