数据结构c++ 链表

这是已知
typedef int ElemType;//元素类型
typedef struct LNode
{ElemType data;
struct LNode *next;
}LNode,*LinkList;
写一个函数,建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。
void create(LNode &L)
{
int length=0;
cout<<"请输入链表长度(不包括头结点)"<<endl;
cin>>length;
srand( (unsigned)time(0) );
//以下建立链表

LNode *p;
p=new LNode;
p->data=rand()%100;
p->next=NULL;
Linklist->next=p;

for(int i=1;i<length;i++)
{
LNode *q;
q=new LNode;
q->data=rand()%100;//这里避免数字过大,取0-99的数
q->next=NULL;
p->next=q;
p=q;
}
}

这是建立链表的函数

那个建立链表的函数有点小错误,请参看以下的内容,后面还有两个函数供测试用的:
void create(LinkList L)
{
int length=0;
cout<<"请输入链表长度(不包括头结点)"<<endl;
cin>>length;
srand( (unsigned)time(0) );
//以下建立链表

LNode *p;
p=new LNode;
p->data=rand()%100;
p->next=NULL;
L->next=p;

for(int i=1;i<length;i++)
{
LNode *q;
q=new LNode;
q->data=rand()%100;//这里避免数字过大,取0-99的数
q->next=NULL;
p->next=q;
p=q;
}
}

void separate(LinkList L, LinkList &Odd, LinkList &Even)
{ // 设奇数和偶数链表都没有构建
Odd = new LNode;
Odd->next = NULL;
Even = new LNode;
Even->next = NULL;
LNode *p = L->next, *r, *s = Odd, *t = Even;
L->next = NULL; // 原链表断开
while (p != NULL)
{
r = p;
p = p->next;
if (r->data % 2) // 奇数
{
r->next = s->next;
s->next = r;
s = r;
}
else
{
r->next = t->next;
t->next = r;
t = r;
}
}
}

void Output(LinkList L)
{ // 输出函数
LNode *p = L->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main()
{
LinkList L1, Lo, Le;
L1 = new LNode;
L1->next = NULL;
create(L1);
Output(L1);
separate(L1, Lo, Le);
Output(Lo);
Output(Le);
}
温馨提示:答案为网友推荐,仅供参考
相似回答