struct ListNode *readlist(){ //本题是不带头节点的,但是我用的带头结点的方法,所以最后我返回了H->next;
struct ListNode *H = (struct ListNode *)malloc(sizeof(struct ListNode));
H->data = 0;
struct ListNode *s = H;
int in;
scanf("%d",&in);
while(in!=-1){
struct ListNode *p = (struct ListNode*)malloc(sizeof(struct ListNode));
p->data = in;
s->next = p;
s = p;
scanf("%d",&in);
}
return H->next;
}
struct ListNode *getodd( struct ListNode **L ){ //由于我适应了使用带头结点的链表,所以最后返回H->next就是一样的
struct ListNode *H1 = (struct ListNode*)malloc(sizeof(struct ListNode)); //奇数的存储奇数的链表
struct ListNode *t1 = H1;
struct ListNode *H2 = (struct ListNode*)malloc(sizeof(struct ListNode)); //偶数的存储奇数的链表
struct ListNode *t2 = H2;
struct ListNode *a1,*a2;
while(*L){
if(((*L)->data%2)!=0){ //奇数值节点
a1 = (struct ListNode*)malloc(sizeof(struct ListNode));
a1->data = (*L)->data;
t1->next = a1;
t1 = a1;
}else{
a2 = (struct ListNode*)malloc(sizeof(struct ListNode));
a2->data = (*L)->data;
t2->next = a2;
t2 = a2;
}
(*L) = (*L)->next;
}
t1->next = NULL; //尾插法一点要在最后把结尾指向NULL,头插法就不需要因为第一个生成的节点就指向NULL;
t2->next = NULL; //尾插法一点要在最后把结尾指向NULL;
(*L) = H2->next;
return H1->next;
}
习题11-7 奇数值结点链表 (20分)
最新推荐文章于 2021-05-11 21:22:19 发布