释放原先的链表所有结点 这个有有关问题啊请大神帮帮忙

释放原先的链表所有结点 这个有问题啊请大神帮帮忙
struct SNAKE *p_new = NULL;
if(snake == NULL)//没有任何节点时,先生成第一个节点
{
snake = (struct SNAKE*)malloc(sizeof(struct SNAKE));
snake->letter = NowLetter;
snake->pos = pos;
snake->NEXT = NULL;
return;
}
if(snake != NULL)//生成新的其它节点
{
      //重玩游戏时,释放原先的链表所有结点

       for(snake=p_new;p_new->next != NULL;p_new = p_new->next)
        {
            free(p_new->NEXT);
        }
p_new = (struct SNAKE*)malloc(sizeof(struct SNAKE));
p_new->letter = NowLetter;
p_new->pos = pos;
p_new->NEXT = snake;
snake = p_new;
}
------解决思路----------------------
别的我不管,链表删除肯定有问题

for(p_new = snake;p_new->next != NULL;p_new = p_new->next) //实现从前往后删除节点
{
        struct SNAKE *temp = p_new->next;
        if(temp !=  NULL)
        {
            p_new->next = temp->next;
            free(temp);
            temp = NULL;
        }
 }

释放原先的链表所有结点  这个有有关问题啊请大神帮帮忙