判断是否为回文链表的程序报错了,说我有什么空指针,但我看了半天都没发现哪里有空指针


struct ListNode* front;
struct ListNode* middle;
struct ListNode* last;  
struct ListNode* p; 
struct ListNode* s;
struct ListNode* q;
struct ListNode* new;   //121
front=head;
new=(struct ListNode*)malloc(sizeof(struct ListNode));
p=new;
q=new;
if(front==NULL){
    return true;
}
while(front){
    s=(struct ListNode*)malloc(sizeof(struct ListNode));
    s->val=front->val;
    p->next=s;
    p=s;
    front=front->next;
}
front=head;
p->next=NULL;
q=q->next;
if(front->next){
    middle=front->next;
} else{
    return true;
}
if(middle->next){
    last=middle->next;
} else{
    if(front->val==middle->val){
        return true;
    }else{
        return false;
    }
}
while(last->next){
middle->next=front;
front=middle;
middle=last;
last=last->next;
}
middle->next=front;
last->next=middle;
while(last){
    if(q->val==last->val){
        q=q->next;
        last=last->next;
    }else{
        return false;
    }
}
return true;

new在cpp文件中是关键字