关于链表判断循环条件的问题

问题遇到的现象和发生背景

想问个关于链表删除奇数项地问题,为啥我这个p->next!=NULL每次都无法争取判断跳出循环啊。

用代码块功能插入代码,请勿粘贴截图
 #include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int data;
    struct node*next;
}NODE;


NODE* creat()
{
    NODE* h=NULL,*r=NULL,*p;
    int i = 0;
    printf("please enter 5 integrets:");
    for(i;i<5;i++)
    {
        p = (NODE*)malloc(sizeof(NODE));
        scanf_s("%d", &p->data);
        p->next = NULL;
      if(h==NULL)
      {
          h = p;
          r = p;
      }
      else
      {
          r->next = p;
          r = p;
      }
    }
    return h;
}
   int main()
   {
       NODE* h,*p,*t;
       h=creat();
       for(p=h;(p->next)!=NULL;p=p->next)
       {
          if((p->next->data)%2!=0)
          {
              t = (NODE*)malloc(sizeof(NODE));
              t = p->next;
              p->next = p->next->next;
              free(t);
          }
       }
       for(p=h;p!=NULL;p=p->next)
       {
           printf("%d", p->data);
       }
       return 0;
   }

运行结果及报错内容

img