我想问问这个链表定义的逻辑有没有问题

这个链表我怎么想都想不出是怎么指向下一个的地址的

其中参数n的值为12,m的值是100

 NODE *creatlink(int n, int m)
{ NODE *h,*p,*s;
  int i;
  h=p=(NODE *)malloc(sizeof(NODE));
  h->data=9999;
  for(i=1;i<=n;i++)
    { s=(NODE *) malloc(sizeof(NODE));
      s->data=rand()%m; s->next=p->next;
      p->next=s;  p=p->next;
    }
  p->next=NULL;
  return h;
}

http://blog.csdn.net/a29562268/article/details/53932682 这个是双向链表的实现