char字符与指针存放内存冲突怎么解决?

1.代码问题出现在链表连接上
2.代码:
pNode CreateList(void)
{
pNode p = NULL;
pNode rear=NULL;
char flag = 'y';


do
{

    p = (pNode)malloc(sizeof(ListNode));

    if (head == NULL)
    {
        head = p;
    }

    if(rear!=NULL)
    {
        rear ->next= p;
    }


    printf("\n添加的编号:\n");
    scanf("%d", &p->data.num);


    p->next = NULL;
    rear = p;
    printf("继续建表?(y/n):");
    scanf("%s", &flag);
} while (flag == 'y');
p->next = NULL;
rear = NULL;       /*终端结点指针置空*/
p = NULL;
return head;            /*返回链表头指针*/

}
3.问题描述:
利用指针存放地址相同制作链表图片说明

到第二部都没有问题图片说明

但是一输入判读字符flag后rear指针存放地址就变了
图片说明

强制更改就会这样图片说明

求大佬帮忙解决,重启过电脑了。。

https://blog.csdn.net/dsanmux/article/details/47866499