LeetCode - 删除排序链表中的重复元素

日常刷题中!🐵

GitHub链接:

刷题代码都在Exercise库中提交

题目:

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例1🎈 输入:head = [1,1,2] 输出:[1,2] 示例2🎈 输入:head = [1,1,2,3,3] 输出:[1,2,3]

LeetCode链接:

解析:

由于这个是单链表的结构,所以当我们要删除某一个节点时,必须要能找到下一个节点的地址,否则就没法去链接了。那么我们再删除重复节点时,只能一个一个节点的去删除。 核心思想🐵 循环遍历,如果当前节点值等于下一个节点值,则将当前节点链接到下下个节点,跳过相同值的节点。否则,当前节点等于下个节点,向后遍历链表 。 注意🐵 一般遍历链表有两个结束条件,一个是节点为空,一个是节点的下驱指针next为空,要根据不同的情景去判断。

代码实现:

struct ListNode* deleteDuplicates(struct ListNode* head) 
{
    //循环遍历,如果当前节点值等于下一个节点值,则将当前节点链接到下下个节点
    //跳过相同值的节点
    //否则,当前节点等于下个节点,向后遍历链表
    struct ListNode* phead = head;
    if (phead == NULL)
    {
        return head;
    }
    while (phead->next != NULL)
    {
        if (phead->val == phead->next->val)
        {
            phead->next = phead->next->next;
        }
        else
        {
            phead = phead->next;
        }
    }
    return head;
}

小结:

对于链表的操作一定要保证其链接性,所以思路会和顺序表的题目有所差异,需要我们大量去练习,拓展我们的思路。

经验分享 程序员 微信小程序 职场和发展