代码:
struct ListNode *readlist(){
struct ListNode *head=NULL,*rear=NULL,*p;
int x;
scanf("%d",&x);
while(x!=-1){
p=(struct ListNode *)malloc(sizeof(struct ListNode));
p->data=x;
if(head==NULL)
head=rear=p;
else{
rear->next=p;
rear=p;
}
rear->next=NULL;
scanf("%d",&x);
}
return head;
}//因为要顺序打印所以要使用尾插法
struct ListNode *getodd( struct ListNode **L ){
struct ListNode *h1=NULL,*h2=NULL,*r1=NULL,*r2=NULL,*p;
while(*L){
if((*L)->data%2!=0){
p=(struct ListNode *)malloc(sizeof(struct ListNode));
p->data=(*L)->data;
if(h1==NULL)
h1=r1=p;
else{
r1->next=p;
r1=p;
r1->next=NULL;
}
}//如果是奇数就放进新的链表
else{
p=(struct ListNode *)malloc(sizeof(struct ListNode));
p->data=(*L)->data;
if(h2==NULL)
h2=r2=p;
else{
r2->next=p;
r2=p;
r2->next=NULL;
}
}//这里其实偷懒了并没有对原来的链表原地操作而是将偶数也放进了一个新的链表中
*L=(*L)->next;
}
*L=h2;//让L指向新的链表
return h1;
}