Leetcode删除链表中的重复元素
Posted AI 菌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode删除链表中的重复元素相关的知识,希望对你有一定的参考价值。
一、题目
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,
使每个元素只出现一次。返回同样按升序排列的结果链表。
二、解析
对于此题,我的解题步骤如下:
- 创建两个指针pre、curr,分别表示历史指针、当前指针。
- 从链表的首位置开始,移动curr一步,并与pre的值相比较。
- 如果相同,则跳过中间指针,将pre指向curr->next。但此时不更新pre,因为还需确定下一个元素是否与pre相同; 如果不同,则跟新pre。
- 重复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;
}
};
提交结果如下:
以上是关于Leetcode删除链表中的重复元素的主要内容,如果未能解决你的问题,请参考以下文章