陷入死循环是为什么?

链表删除操作里面陷入了死循环是为什么
while(notedata!=p➡️data&&p➡️next!=null)这里陷入了死循环,和答案对照感觉没有问题啊

img

写的不对,修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
struct link{
    int  data;
    struct link *next;
};
struct link *DeleteNode(struct link *head, int noteData)
{
    struct link *p = head, *pr = NULL;
    if (!head)
        return NULL;
    if (p->data == noteData){
        head = p->next;
        free(p);
    }
    else{
        while (p->next && p->next->data != noteData) {
            p = p->next;
        }
        if (p->next) {
            pr = p->next;
            p->next = p->next->next;
            free(pr);
        }
        else
            printf("no!!!!");
    }
    return head;
}

看看链表怎么创建的,最后一个元素是否指向null,是否链表中存在环(后面的节点又指向了前面的节点)