题解 | #删除有序链表中重复的元素-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;
}

全部评论

相关推荐

05-27 20:40
已编辑
天津师范大学 Java
点赞 评论 收藏
分享
05-13 00:41
已编辑
北京邮电大学 Java
理性的杰克刷牛客:ai肯定要有的,最好学一下agent方向加一个智能客服什么的进去,并且多加点什么skill,mcp啥的,另外你现在的项目深度有些浅,这些功能都太简单了,而且也不是真正能扛高并发的实现,没有什么太大的亮点,可以去网上找点更有深度的项目。可以先投一些中小厂,有实习经历以后再去大厂,你现在这个大厂可能机会不大
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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