题解 | #删除有序链表中重复的元素-I#

删除有序链表中重复的元素-I

https://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79

这个题目还是非常基础的链表题目~

由于是删除重复的元素,所以使用哈希数组会非常方便。题目是说node->val的范围咋-100~100,所以我们设置一个201大小的数组作为哈希数组。其中-100对应的index就是0,0对应的是100,100对应的是200

这样我们可以仅仅遍历一次链表就可以了,设置一个tail指针=head->next,首先将hash[head->val+100]设置为1,然后对tail->val进行判断。

如果遇到hash[tail->val+100]==1,说明是重复的节点,则仅仅需要执行head->next = tail->next;free(tail);tail = head->next;即可。对了,这里忘记说,在非重复的情况下,head跟随tail向后移动~

注意的特殊情况就是1.head=NULL.2.初始请款下的head->next==NULL

struct ListNode* deleteDuplicates(struct ListNode* head ) {
    // write code here
    if(head==NULL)
    {
        return NULL;
    }
    int hash[201]={0};
    struct ListNode* tail = head->next;
    if(tail==NULL)
    {
        return head;
    }
    struct ListNode* out = head;
    hash[head->val+100] = 1;
    while(tail!=NULL)
    {
        if(hash[tail->val+100]==1)
        {
            head->next = tail->next;
            free(tail);
            tail = head->next;
        }
        else 
        {
            hash[tail->val+100] = 1;
            head = head->next;
            tail = tail->next;
        }
    }
    return out;
}

全部评论

相关推荐

牛客92804383...:在他心里你已经是他的员工了
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 18:05
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务