LeetCode:19题有点bug请教

LeetCode:19题
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:

给定的 n 保证是有效的。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    if(head->next == NULL) return NULL;
    struct ListNode* p = NULL;
    struct ListNode* q= NULL;
    p = head->next;
    int count = 0;
    while(p){
        count++;
        p = p->next;
    }

    p = head;
    for(int j=0;j<(count-n);j++){
        p = p->next;
    }
    q = p->next;
    p->next = q->next;
    free(q);

    return head;    
}



请问大佬们这个[1,3] 2为什么会返回1呢 删除的节点是最后一个 我用自己的VC都不会出现这个问题,不懂为什么还望有大佬可以解释一下 不胜感激

https://blog.csdn.net/qq_39241239/article/details/82319620

我只想知道自己哪里错了,很难受,为什么AC不了呢