讨论/题目交流/请问第19题 为什么AC不了 拿自己电脑的编译器测试都没问题/
请问第19题 为什么AC不了 拿自己电脑的编译器测试都没问题

删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 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){
    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;    
}

当只有一个元素时 n=1时删除不成功,在 p->next = q->next;报出空指针异常 有大佬解释一下吗 不胜感激!!

因为只有一个节点时q == p->next == NULL,这时访问空指针q肯定会报错。leetcode报错已经定位了,好好检查代码就好了。