c语言链表题目,该怎么做呢

预设代码中建立了一个带有头结点的单向链表。
编写一个函数,将链表中数值域的数值为偶数的节点移到链表尾部。
如果偶数节点多于一个,则连接到链表尾部节点的先后顺序按原来的顺序。
结构的定义:
struct node
{

int num;

struct node *next;

}
typedef struct node NODE;
函数的原型:NODE *MoveNode( NODE *head )。
其中:参数 head 是单向链表的头指针。函数的返回值是单向链表的头指针。
运行时输入有一行,输入各个节点的数值域的值,输入-1时结束。
例如链表节点数值成员值为:15 6 7 21 2 13 24 -1 //-1 是节点输入结束标志
输出:15 7 21 13 6 2 24

NODE *MoveNode( NODE * head){  
    NODE *p,*q,*f,*p1,*q1,*I;  
    p=head->next,q1=head,p1=q1->next;  
    f=q1->next;  
    while(p!=NULL) { if(p->no%2!=0) f=p; p=p->next; }  
    q=f->next,I=f;  
     while(p1!=f){  
        if(p1->no%2==0){  
            q1->next=p1->next;  
            I->next=p1;  
            I=p1;  
            p1->next=q;  
            p1=q1->next;  
         }  
         else q1=q1->next,p1=p1->next;   
     }  
    return head;  
}  

分段输出就完事了,或者你可以end后面加一个节点。

楼上莫非都是百丽宫学子?