删除链表中重复的结点 — C++实现
发布日期:2021-10-02 06:27:37 浏览次数:2 分类:技术文章

本文共 1145 字,大约阅读时间需要 3 分钟。

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

解题思路

遍历链表,如果发现当前结点的值和下一结点的值相同,即为重复,则将重复的值记录下来,并从该位置开始选择删除,直到遇到不重复的值为止

需要注意两点:

  • 上一不重复的结点(应记录下来)的next指针应该指向下一不重复的结点
  • 如果头结点被删除了,需要更换头结点

C++代码实现

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :        val(x), next(NULL) {    }};*/class Solution {
public: ListNode* deleteDuplication(ListNode* pHead){
if(!pHead)return NULL; ListNode *ptr; ptr=pHead; bool can=false; ListNode *pre=NULL; while(ptr!=NULL){
if(ptr->next&&ptr->val==ptr->next->val)can=true; if(can){
ListNode *de=ptr; int val=de->val; while(de!=NULL&&val==de->val){
ptr=ptr->next; delete de; de=ptr; } if(pre==NULL)pHead=ptr; else pre->next=ptr; can=false; }else{
pre=ptr; ptr=ptr->next; } } return pHead; }};
运行时间:3ms占用内存:376k

转载地址:https://blog.csdn.net/Jeaten/article/details/108130480 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:斐波那契蛇 — Python实现
下一篇:打印从1到最大的n位数 — C++实现

发表评论

最新留言

不错!
[***.144.177.141]2024年04月09日 11时44分51秒