83. 删除排序链表中的重复元素

82 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

一、题目描述:

83. 删除排序链表中的重复元素 - 力扣(LeetCode) (leetcode-cn.com)

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

示例 1:

image.png

输入:head = [1,1,2]
输出:[1,2]

示例 2:

image.png

输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

二、思路分析:

先判断题给链表是否为空或者是否只有一个结点,若是,则直接返回题给链表。
若题给链表不止一个结点,先声明一个cur指针指向头结点。
然后让cur指针从头结点开始遍历链表,循环条件是cur指针指向的结点不为空且cur指针指向的结点的下一个结点也不为空。
在循环中,判断cur指向的结点以及其下一个结点的值是否相同,若相同,就将cur指向的结点的next指向cur指向的结点的下一个结点;若不同,就将cur指针后移。
遍历结束后返回头结点,得到的新的结点就是删除了重复元素后的新结点。

三、AC 代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* deleteDuplicates(struct ListNode* head){
    if(!head || !head->next)
        return head;
    
    struct ListNode* cur = head;
    while(cur && cur->next){
        if(cur->val == cur->next->val){
            cur->next = cur->next->next;
        }
        else{
            cur = cur->next;
        }
    }
    return head;
}

范文参考:

83. 删除排序链表中的重复元素(五种方法) - 删除排序链表中的重复元素 - 力扣(LeetCode)

83. 删除排序链表中的重复元素【快慢指针/递归/Map】 - 删除排序链表中的重复元素 - 力扣(LeetCode)