0.简介

      本文是牛客网《剑指offer》笔记。

1.题目

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

 

2.思路

      链表有0个节点

链表有1个节点

链表有2个以上节点

三个指针和两层循环实现删除链表中重复的节点。

首先,检查边界条件(链表有0个节点或链表有1个节点)时,返回头结点;其次,避免由于第一个节点是重复节点而被删除,新建一个指向头结点的节点;再次,建立三个指针pre/p/next,分别指向当前节点的前序节点、当前节点、当前节点的后续节点;最后循环遍历整个链表,如果节点p的值和节点next的值相同,则删除节点p和节点next,pre和下一个没有重复的节点连接。如果节点p的值和节点next的值不同,则三个指针向后移动一个指针。

3.code

 /*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
// 链表有0个/1个节点,返回第一个节点
if(pHead==NULL||pHead->next==NULL)
return pHead;
else
{
// 新建一个头节点,防止第一个结点被删除
ListNode* newHead=new ListNode(-1);
newHead->next=pHead; // 建立索引指针
ListNode* p=pHead; // 当前节点
ListNode* pre=newHead; // 当前节点的前序节点
ListNode* next=p->next; // 当前节点的后序节点 // 从头到尾遍历编标
while(p!=NULL && p->next!=NULL)
{
if(p->val==next->val)//如果当前节点的值和下一个节点的值相等
{
// 循环查找,找到与当前节点不同的节点
while(next!=NULL && next->val==p->val)
{
ListNode* temp=next;
next=next->next; // 删除内存中的重复节点
delete temp;
temp = nullptr; } pre->next=next;
p=next;
}
else//如果当前节点和下一个节点值不等,则向后移动一位
{
pre=p;
p=p->next;
}
next=p->next;
}
return newHead->next;//返回头结点的下一个节点
}
}
};

最新文章

  1. PAT 1043. 输出PATest(20)
  2. Android Sqlite 数据库版本更新
  3. notpad++安装python插件
  4. iOS开发-UISlider改变图片透明度
  5. 《Java虚拟机原理图解》 1.2、class文件里的常量池
  6. (八)Hibernate 映射关系
  7. python two-dimensional array assignment initialize
  8. PySide——Python图形化界面
  9. RS485中继器电路(转)
  10. 数据库ER图 PowerDesigner
  11. android仿漫画源码、抽奖转盘、Google相册、动画源码等
  12. [记]Debian alias 设置, 不设置貌似有点不方便习惯
  13. 一个特殊的SQL Server阻塞案例分析
  14. 洛谷.4655.[CEOI2017]Building Bridges(DP 斜率优化 CDQ分治)
  15. 同时安装anaconda2和anaconda3
  16. Android 音视频深入 四 录视频MP4(附源码下载)
  17. Vue.nextTick和Vue.$nextTick
  18. CSS背景图片垂直居中center不起效果完美解决
  19. 软工网络15团队作业8——Beta阶段敏捷冲刺(day1)
  20. Vuejs+axios+SpringMVC 1

热门文章

  1. "深入理解C语言" 指针
  2. 转:Windows下USB接口驱动技术(二)
  3. 在看 jquery 源码中发现的一些优化方向
  4. class_exists — 检查类是否已定义
  5. 安装Discuz开源论坛
  6. linux安装Zabbix监控
  7. hive学习5(复制表结构)
  8. js的值类型和引用类型
  9. linux命令:rm 命令
  10. Overlay网络与物理网络的关系