剑指offer:删除链表中重复的结点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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:删除链表中重复的结点相关推荐
- python实现剑指offer删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 剑指offer.删除链表中重复的节点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留. 样例1 输入:1->2->3->3->4->4->5输出:1->2-> ...
- 剑指offer——面试题57:删除链表中重复的结点
剑指offer--面试题57:删除链表中重复的结点 Solution1: 删两遍,自己想的破算法.理论上时间复杂度也是O(n)O(n)O(n),并非最优解. /* struct ListNode {i ...
- 力扣—— 19. 删除链表的倒数第 N 个结点(java)、剑指 Offer 22. 链表中倒数第k个节点(java)
19. 删除链表的倒数第 N 个结点(java) 一.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 输入:head = [1,2,3 ...
- 【每日一题】剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点
- 【LeetCode】剑指 Offer 22. 链表中倒数第k个节点
[LeetCode]剑指 Offer 22. 链表中倒数第k个节点 文章目录 [LeetCode]剑指 Offer 22. 链表中倒数第k个节点 一.遍历 二.双指针 总结 一.遍历 先遍历统计链表长 ...
- 不带头节点的链表有哪些缺点_14. 删除链表中重复的结点
删除链表中重复的结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4-> ...
- 链表2--JZ25复杂链表的复制JZ36两个链表的第一个公共结点JZ55链表中环的入口结点JZ56删除链表中重复的结点
JZ25复杂链表的复制 >>点击此链接 JZ36两个链表的第一个公共结点 题目描述 输入两个无环的单链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他 ...
- 【Java】牛客网 删除链表中重复的结点
题目描述 : 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表 1->2->3->3->4->4->5 ...
- 链表题目---4 删除链表中重复的结点 和 判断链表是否为回文链表
删除链表中重复的结点 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {} ...
最新文章
- c语言序列sequence,Sequence
- JavaWeb之文件上传
- jquery操作dom
- x264 struct学习 1
- GetProcAddress()用法
- 关于代码控制管理的一些想法
- HTTP 协议 - 简单谈谈 TCP / IP (一)
- 【排序算法】希尔排序-常规排序
- html单元格竖着排列,html表格,表头竖向固定,横向滚动的例子
- linux 防火墙安装在哪,Linux下Shorewall防火墙安装和配置
- 经济数学线性代数第三版课后习题答案
- 计算机系统的日常运行维护,浅谈计算机系统的日常维护管理
- 如何精确理解leader布置的任务
- 电脑专业英语1500词-2
- CAN 数据帧,远程帧,错误帧,以及出错重连
- one 主格 复数 宾格_(完整版)英语主格宾格及其练习题
- SkyEye天目全数字实时仿真软件功能介绍
- 朱会灿:搜索引擎演变史【腾讯大讲堂第3期】
- 成人高等教育本科生学士学位日语水平考试大纲
- 小马哥---高仿苹果6sp主板型号 W3215 6582刷机拆机主板图
热门文章
- Rabbitmq 消息对列 生产者与消费者的具体实现 springboot
- Nginx反向代理和负载均衡部署指南
- c:forEach items=${list} var=tt varStatus=status 的相关大小长度
- linux跟踪线程的方法:LWP和strace命令
- Caffe学习系列(7):solver及其配置
- J-Focus动画应用框架使用教程
- mysql是如何管理数据_【MySQL】如何管理数据库
- oracle增加数据时报没安装java_在linux上安装Oracle Developer Tools for VS Code
- python范数norm的计算
- 在使用import语句时