从排序列表中删除重复项不通过所有测试用例

时间:2018-03-01 02:36:25

标签: c++ algorithm linked-list duplicates singly-linked-list

这是关于leetcode的问题。出于某种原因,我的代码仅适用于7/164测试用例。我想知道为什么我的算法效率不高。 这是什么解决方案?我的代码出了什么问题? 这里是问题的链接 https://leetcode.com/problems/remove-duplicates-from-sorted-list/description/

编辑:我已经采取了建议和编辑过的代码,但我的算法仍未通过,我的时间限制超出错误。算法有效吗?

class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
    ListNode* current = head;
    ListNode* nex;

    while(current!=NULL){
        nex=current->next;
        if (nex==NULL)
            break;


        if(current->val==nex->val)
            current->next=nex->next;
        if (current->next==NULL)
            break;
        current==current->next;
         if(current->next==NULL)
            break;



    }
    return current;

}

};

1 个答案:

答案 0 :(得分:2)

nex未初始化。在初始化之前,您尝试将其与NULL进行比较。

您只删除邻居对的重复项。排序列表没问题。

你遇到内存泄漏。

最后两个if是奇怪的。

我认为你从函数返回的不是预期的。

使用==时应使用=

current更改后,您不应更改current->next

while (current && (nex = current->next)){
    if (current->val == nex->val) {
        current->next = nex->next;
        delete nex;
    } else {
        current = current->next;
    }
}
return head;