#include<stdio.h>
#include<stdlib.h>
#define N 20
typedef struct ListNode{
int Data;
ListNode *Next;
}ListNode;
ListNode *readlist();
ListNode *getodd(ListNode **L);
void printlist(ListNode *L){
ListNode *p=L;
while(p){
printf("%d ",p->Data);
p=p->Next;
}
printf("\n");
}
int main()
{
ListNode *L,*Odd;
L=readlist();
Odd=getodd(&L);
printlist(Odd);
printlist(L);
return 0;
}
ListNode *readlist(){
int in=0;
ListNode *h,*p,*q;
/*建立头节点*/
scanf("%d",&in);
h=(ListNode*)malloc(sizeof(ListNode));
h->Data=in;
h->Next=NULL;
p=h;
/*建立链表*/
scanf("%d",&in);
while(in!=-1){
q=(ListNode*)malloc(sizeof(ListNode));
q->Data=in;
q->Next=NULL;
p->Next=q;
p=q;
scanf("%d",&in);
}
p->Next=NULL;
return h;
}
ListNode *getodd(ListNode **L){
int a[N],i=0,n=0;
ListNode *OddHead,*p,*q,*Head=*L;
/*先确保Head的头节点是偶数*/
while((Head->Data)%2==1){
a[i++]=Head->Data;
Head=Head->Next;
}
/*提取奇数*/
p=Head;
q=Head->Next;
while(q){
if((q->Data)%2==1){
a[i++]=q->Data;
p->Next=q->Next;
free(q);
q=p->Next;
continue;
}
else{
p=q;
q=q->Next;
}
}
*L=Head;
n=i;
i=0;
/*建立奇数值链表*/
OddHead=(ListNode*)malloc(sizeof(ListNode));
OddHead->Data=a[i++];
OddHead->Next=NULL;
p=OddHead;
while(i<n){
q=(ListNode*)malloc(sizeof(ListNode));
q->Data=a[i++];
q->Next=NULL;
p->Next=q;
p=q;
}
p->Next=NULL;
return OddHead;
}
PTA习题11-7 奇数值结点链表(20 分) 改进版
最新推荐文章于 2021-08-14 21:49:52 发布