【剑指offer】删除链表中重复的结点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
分析:
有两种写法,思路都是遍历链表,然后删除重复结点
写法1:非递归,双指针法
1)增加一个虚拟头结点p,便于处理
2)现在设定两个指针first和last,first先指向当前结点,last往后移动寻找和当前结点值不同的结点,first->next=last
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode *pHead)
{
//增加虚拟头结点p
ListNode *p=new ListNode(-1);
p->next=pHead; //first指向当前结点,last往后移动寻找和当前结点值不同的结点
ListNode *first=p;
ListNode *last=pHead; while(last!=NULL&&last->next!=NULL)
{
if(last->val!=last->next->val)
{
first=last;
last=last->next;
}else
{
int x=last->val;
while(last->next!=NULL)
{
if(last->val==x)
{
last=last->next;
}else
{
break;
}
}
if(last->val==x)
last=NULL;
first->next=last;
}
}
return p->next;
}
};
写法2:递归,思路一样
ListNode* deleteDuplication(ListNode *pHead)
{
if(pHead==NULL||pHead->next==NULL)//只有1个结点或者0个结点
return pHead;
if(pHead->val==pHead->next->val)//当前结点是重复结点
{
ListNode *temp=pHead->next;
while(temp!=NULL&&temp->val==pHead->val)//跳过与当前结点相同的全部结点,找到第一个与当前结点不同的结点
temp=temp->next;
return deleteDuplication(temp);//从第一个与当前结点不同的结点开始递归
}else//当前结点不是重复结点
{
pHead->next=deleteDuplication(pHead->next);//保留当前结点,从下一个结点开始递归
return pHead;
}
}
【剑指offer】删除链表中重复的结点的更多相关文章
- 剑指Offer——删除链表中重复的结点
题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理 ...
- [剑指offer]删除链表中重复的结点(把重复的都删掉,1个不留)
①题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 ...
- leetcode 203. Remove Linked List Elements 、83. Remove Duplicates from Sorted List 、82. Remove Duplicates from Sorted List II(剑指offer57 删除链表中重复的结点)
203题是在链表中删除一个固定的值,83题是在链表中删除重复的数值,但要保留一个:82也是删除重复的数值,但重复的都删除,不保留. 比如[1.2.2.3],83题要求的结果是[1.2.3],82题要求 ...
- 剑指offer-18-2. 删除链表中重复的结点
剑指offer-18-2. 删除链表中重复的结点 链表 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3-> ...
- python实现剑指offer删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 剑指offer57 删除链表中重复的结点
class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if(!pHead) return pHead; str ...
- 剑指Offer-删除链表中重复的结点
package LinkedList; /** * 删除链表中重复的结点 * 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. * 例如,链表1-> ...
- 剑指offer-删除链表中重复的结点-链表-python ***
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 【Java】 剑指offer(18) 删除链表中重复的结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重 ...
- 【剑指Offer】删除链表中重复的结点 解题报告(Python)
[剑指Offer]删除链表中重复的结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ...
随机推荐
- GoogleUpdate计划任务提权
1.默认低权限无法写入: 2.配置低权限可操控:icacls Update /grant everyone:f 3.下载可执行程序:certutil -urlcache -split -f http: ...
- (7)树莓派读物USB摄像头
https://blog.csdn.net/qq_42403190/article/details/90453305 创建文件 camera.py 简单读取 #!/usr/bin/env python ...
- Linux yum 包 下载地址
yum包网址: http://www.rpmfind.net/linux/rpm2html/search.php?query=yum
- 使用overnightjs typescript 注解开发expressjs 应用
overnightjs 提供了基于注解的expressjs应用开发,包含了比较全的express 开发支持,使用简单,以下是一个简单的试用 项目准备 项目使用pkg 进行了打包处理 初始化 yarn ...
- 如何判断当前脚本运行在node还是浏览器中
判断global对象,如果是window,就是运行在浏览器中,如果global对象是undefined,则运行在node中.
- 洛谷 P1786 帮贡排序 题解
P1786 帮贡排序 题目背景 在absi2011的帮派里,死号偏多.现在absi2011和帮主等人联合决定,要清除一些死号,加进一些新号,同时还要鼓励帮贡多的人,对帮派进行一番休整. 题目描述 目前 ...
- linux修改/etc/profile权限
修改/etc/profile时提示为只读文件,不允许修改, 敲#chmod 777 /etc/profile后仍不允许修改 解决办法: 在root权限下敲 #:mount -o remount,rw ...
- idea打包web项目
打包完成的文件在如下路径
- Mybatis27题
1.什么是Mybatis? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂 ...
- JDBC Api详解
一.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...