【Leetcode】删除链表中的重复元素

举报
AI 菌 发表于 2021/08/05 01:49:35 2021/08/05
1.5k+ 0 0
【摘要】 一、题目 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素, 使每个元素只出现一次。返回同样按升序排列的结果链表。 12 二、解析 对于此题,我的解题步骤如下: 创建两个指针pre、curr,分别表示历史指针、当前指针。从链表的首位置开始,移动curr一步,并与pre的值相比较。如果相同,则跳过中间指针,将pre指向cur...

一、题目

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,
使每个元素只出现一次。返回同样按升序排列的结果链表。

  
 

在这里插入图片描述
在这里插入图片描述

二、解析

对于此题,我的解题步骤如下:

  1. 创建两个指针pre、curr,分别表示历史指针、当前指针。
  2. 从链表的首位置开始,移动curr一步,并与pre的值相比较。
  3. 如果相同,则跳过中间指针,将pre指向curr->next。但此时不更新pre,因为还需确定下一个元素是否与pre相同; 如果不同,则跟新pre。
  4. 重复2、3步骤。

三、实现

以上思路,通过C++实现如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 * int val;
 * ListNode *next;
 * ListNode() : val(0), next(nullptr) {}
 * ListNode(int x) : val(x), next(nullptr) {}
 * ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public: ListNode* deleteDuplicates(ListNode* head) { ListNode* curr = head; ListNode* pre = curr; while(curr != nullptr) { curr = curr -> next; if(curr != nullptr && curr->val == pre->val) //前后值一样 { pre->next = curr->next; //跳过重复的节点 } else { pre = curr; // 如果不是重复,则更新pre } } return head; }
};

  
 

提交结果如下:
在这里插入图片描述

文章来源: ai-wx.blog.csdn.net,作者:AI 菌,版权归原作者所有,如需转载,请联系作者。

原文链接:ai-wx.blog.csdn.net/article/details/118461039

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。