#include<stdio.h>
#include<stdlib.h>
struct LB
{
int data;
struct LB *next;
};
struct LB *Create();
void Shu(struct LB *head);
void Fen(struct LB *J,struct LB *O,struct LB *H);
int main()
{
struct LB *H,*J=NULL,*O=NULL;
printf("请输入链表元素(输入-1结束输入):\n");
H=Create();
Shu(H);
Fen(J,O,H); //分裂出奇偶链表,不另外创建,直接分裂
return 0;
}
struct LB *Create()
{
struct LB *head=NULL,*p,*p1;
p=(struct LB *)malloc(sizeof(struct LB));
scanf("%d",&p->data );
p->next =NULL;
while(p->data !=-1)
{
if(head==NULL)
{
head=p;
p1=p;
}
else
{
p1->next =p;
p1=p;
}
p=(struct LB *)malloc(sizeof(struct LB));
scanf("%d",&p->data );
p->next =NULL;
}
return head;
}
void Shu(struct LB *head)
{
struct LB *p;
p=head;
while(p!=NULL)
{
printf("%-3d",p->data );
p=p->next ;
}
putchar('\n');
}
void Fen(struct LB *J,struct LB *O,struct LB *H) //链表分裂
{
struct LB *j,*o,*temp;
int i=1;
while(H!=NULL)
{
temp=H; //取出结点
H=H->next ;
temp->next =NULL; //每次进行收尾
if(i%2!=0) //奇数结点
{
if(J==NULL)
{
J=temp;
j=temp;
}
else
{
j->next =temp;
j=temp;
}
}
else //偶数结点
{
if(O==NULL)
{
O=temp;
o=temp;
}
else
{
o->next =temp;
o=temp;
}
}
i++;
}
printf("奇链表如下:\n");
Shu(J);
printf("偶链表如下:\n");
Shu(O);
}
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。 请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。如下实例。示例 :输入: 1->2->3->4-
于 2021-12-11 10:21:35 首次发布