VS2010中C指针类型转换

写了一段代码无法编译,感觉应该是指针类型转换出了问题,请有经验的程序员帮忙看一看,系统报错如下:
error C2440: “=”: 无法从“NODE *”转换为“NODE”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

我的代码如下:
#include
using namespace std;
#include
#include

struct node
{
int num;
struct node link;
};
typedef struct node
NODE;

void main()
{
int n, k, m, i,j,a,b;

NODE head,q,p;
head=(NODE)malloc(sizeof(NODE));
head->link=NULL;

scanf("%d,%d,%d",&n,&k,&m);
head->num=n;
i=n-1;
q=head;//q为跟踪节点;
while(i)
{
    p=(NODE)malloc(sizeof(NODE));//p为新建节点;
    p->num=i;

    p->link=head;
    head=p;
    i--;

}
q->link=head;//建立环装链表完成。

for(j=1;j<=k;j++)
{
    q=q->link;
}//q停留在当前要报数的那个人身上。

//接下来开始T人。
for(a=1;a<=n;a++)//开始循环T人
{
    for(b=1;b<m;b++)//开始找人
    {
        q=q->link;
    }
    printf("%d ",q->link->num);
    q->link=q->link->link;
    if(a%10==0) printf("\n");
}
printf("\n");

}

第一次提问,只有五个币,望大神不吝赐教。

你类型指针等定义不准确

  Node *p=(Node *)malloc(sizeof(Node)); 

struct node;这个要先定义

head=(NODE)malloc(sizeof(NODE));
->
head=(NODE)malloc(sizeof(node));

通过在线编译
http://codepad.org/nEUppPkA

NODE head,q,p;
你把p声明为了对象类型,但是malloc返回的void*
你看下你的代码,
p=(NODE)malloc(sizeof(NODE));//p为新建节点;
你把void*直接强转为NODE类型,肯定会报错,另外,链表的节点最好用指针来玩,
NODE head, *p, *p;
p = (NODE
)malloc(sizeof(NODE));
这样就不会有问题了