题目描述

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

解题

非递归做法

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};
*/
class Solution {
public:ListNode* deleteDuplication(ListNode* pHead){if(pHead->next==NULL || pHead==NULL) return pHead;ListNode* res= new ListNode(0);res->next=pHead;ListNode* pre = res;ListNode* pNode = res->next;while(pNode != NULL){// 找到第一个不重复的节点if(pNode->next!=NULL && pNode->next->val == pNode->val){while(pNode->next!=NULL && pNode->next->val == pNode->val)pNode=pNode->next;pre->next = pNode->next; // 上一个不重复的节点直接连上下一个不重复的节点pNode=pNode->next;}else{pre = pre->next;pNode=pNode->next;}}return res->next;}
};
/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};
*/
// 递归做法
class Solution {
public:ListNode* deleteDuplication(ListNode* pHead){if(pHead->next==NULL || pHead==NULL) return pHead;if(pHead->val == pHead->next->val){// 当前结点是重复结点ListNode* pNode = pHead->next;while(pNode != NULL && pNode->val == pHead->val) // 跳过值与当前结点相同的全部结点,找到第一个与当前结点不同的结点pNode = pNode->next;return deleteDuplication(pNode);// 从第一个与当前结点不同的结点开始递归}else{pHead->next = deleteDuplication(pHead->next);// 保留当前结点,从下一个结点开始递归return pHead;}     }
};

剑指offer:删除链表中重复的结点相关推荐

  1. python实现剑指offer删除链表中重复的节点

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

  2. 剑指offer.删除链表中重复的节点

    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留. 样例1 输入:1->2->3->3->4->4->5输出:1->2-> ...

  3. 剑指offer——面试题57:删除链表中重复的结点

    剑指offer--面试题57:删除链表中重复的结点 Solution1: 删两遍,自己想的破算法.理论上时间复杂度也是O(n)O(n)O(n),并非最优解. /* struct ListNode {i ...

  4. 力扣—— 19. 删除链表的倒数第 N 个结点(java)、剑指 Offer 22. 链表中倒数第k个节点(java)

    19. 删除链表的倒数第 N 个结点(java) 一.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 输入:head = [1,2,3 ...

  5. 【每日一题】剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点

  6. 【LeetCode】剑指 Offer 22. 链表中倒数第k个节点

    [LeetCode]剑指 Offer 22. 链表中倒数第k个节点 文章目录 [LeetCode]剑指 Offer 22. 链表中倒数第k个节点 一.遍历 二.双指针 总结 一.遍历 先遍历统计链表长 ...

  7. 不带头节点的链表有哪些缺点_14. 删除链表中重复的结点

    删除链表中重复的结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4-> ...

  8. 链表2--JZ25复杂链表的复制JZ36两个链表的第一个公共结点JZ55链表中环的入口结点JZ56删除链表中重复的结点

    JZ25复杂链表的复制 >>点击此链接 JZ36两个链表的第一个公共结点 题目描述 输入两个无环的单链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他 ...

  9. 【Java】牛客网 删除链表中重复的结点

    题目描述 : 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表 1->2->3->3->4->4->5 ...

  10. 链表题目---4 删除链表中重复的结点 和 判断链表是否为回文链表

    删除链表中重复的结点 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {} ...

最新文章

  1. c语言序列sequence,Sequence
  2. JavaWeb之文件上传
  3. jquery操作dom
  4. x264 struct学习 1
  5. GetProcAddress()用法
  6. 关于代码控制管理的一些想法
  7. HTTP 协议 - 简单谈谈 TCP / IP (一)
  8. 【排序算法】希尔排序-常规排序
  9. html单元格竖着排列,html表格,表头竖向固定,横向滚动的例子
  10. linux 防火墙安装在哪,Linux下Shorewall防火墙安装和配置
  11. 经济数学线性代数第三版课后习题答案
  12. 计算机系统的日常运行维护,浅谈计算机系统的日常维护管理
  13. 如何精确理解leader布置的任务
  14. 电脑专业英语1500词-2
  15. CAN 数据帧,远程帧,错误帧,以及出错重连
  16. one 主格 复数 宾格_(完整版)英语主格宾格及其练习题
  17. SkyEye天目全数字实时仿真软件功能介绍
  18. 朱会灿:搜索引擎演变史【腾讯大讲堂第3期】
  19. 成人高等教育本科生学士学位日语水平考试大纲
  20. 小马哥---高仿苹果6sp主板型号 W3215 6582刷机拆机主板图

热门文章

  1. Rabbitmq 消息对列 生产者与消费者的具体实现 springboot
  2. Nginx反向代理和负载均衡部署指南
  3. c:forEach items=${list} var=tt varStatus=status 的相关大小长度
  4. linux跟踪线程的方法:LWP和strace命令
  5. Caffe学习系列(7):solver及其配置
  6. J-Focus动画应用框架使用教程
  7. mysql是如何管理数据_【MySQL】如何管理数据库
  8. oracle增加数据时报没安装java_在linux上安装Oracle Developer Tools for VS Code
  9. python范数norm的计算
  10. 在使用import语句时