Blue_Zx 2024-12-13 08:02 采纳率: 68.2%
浏览 41
已结题

力扣题为什么测试点能过但提交不了

请问为什么这个力扣题运行的时候测试点能过,但提交的时候却给了这样的报错,是哪个地方错误了吗?

img


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteDuplicates(struct ListNode* head) {
    struct ListNode*p,*p0,*q;
    p=head;
    while(p->next!=NULL)
    {
        p0=p;
        p=p->next;
        if(p0->val==p->val)
        {
            q=p;
            p0->next=p->next;
            p=p0;
            free(q);
        }
    }
    return head;
}


img

  • 写回答

1条回答 默认 最新

  • 时光の尘 优质创作者: 嵌入式与硬件开发技术领域 2024-12-13 08:48
    关注

    例如未处理头节点重复、空链表等边界情况当处理特定输入时,由于对空指针进行了不恰当的成员访问操作,导致程序出错:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    struct ListNode* deleteDuplicates(struct ListNode* head) {
        if (head == NULL) {
            // 空链表情况
            return head;
        }
        struct ListNode *p = head;
        while (p->next!= NULL) {
            if (p->val == p->next->val) {
                struct ListNode *temp = p->next;
                p->next = p->next->next;
                free(temp);
            } else {
                p = p->next;
            }
        }
        return head;
    }
    
    

    首先处理空链表的情况,直接返回head(此时head为NULL)。
    在遍历链表时,如果当前节点和下一个节点的值相等,就删除下一个节点(释放其内存),并将当前节点的next指针指向下一个节点的下一个节点,然后继续判断当前节点(因为新的下一个节点可能仍然与当前节点值相等)。
    如果当前节点和下一个节点的值不相等,就将当前节点指针向后移动一位。
    最后返回处理后的链表头head。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月21日
  • 已采纳回答 12月13日
  • 创建了问题 12月13日