挑出来那些奇数个数的节点,然后打印.
所以为什么 getodd 的参数要用 ** 类型的呢,
难道传参数传成 * 就不能吗呜呜呜....
啊啊啊我有点不明白,
谢谢指针帮我锻炼耐心(
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}Listnode;
// typedef struct _list
// {
// Listnode *head;
// }List;
Listnode *readlist();
Listnode *getodd(Listnode **L);
void printlist(Listnode *L);
int main()
{
Listnode *L, *Odd;
L=readlist();
printlist(L);
Odd=getodd(&L);
printlist(Odd);
//printlist(L);
return 0;
}
Listnode *readlist()
{
//List list;
//list.head=NULL;
Listnode *head = NULL;
int number;
Listnode *last=head;
scanf("%d", &number);
while(number!=-1){
Listnode *p=(Listnode *)malloc(sizeof(Listnode));
p->data=number;
p->next=NULL;
if(head == NULL){
head=p;
}
else{
last->next=p;
}
last=p;
scanf("%d", &number);
}
return head;
}
Listnode *getodd(Listnode **L)
{
//Listnode *p = *L; 如果main函数中的再次输出原L的printf还需要,就要这个*p代替一下*L,否则无法输出原来的L,会被修改
Listnode *newhead = NULL, *newlast = NULL;
for(; *L!=NULL; *L = (*L)->next){
if((*L)->data % 2 != 0){
Listnode *a=(Listnode *)malloc(sizeof(Listnode));
a->data = (*L)->data;
a->next = NULL;
if(newhead == NULL){
newhead = a;
}
else{
newlast->next = a;
}
newlast=a;
//printf("%d~", a->data);
}
}
//*L = newhead;
return newhead;
}
void printlist(Listnode *L)
{
Listnode *p=L;
while(p){
printf("%d ", p->data);
p=p->next;
}
printf("\n");
}