删除链表中重复的节点
来源:互联网 发布:java web是什么 编辑:程序博客网 时间:2024/05/14 10:10
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
这个题目首先考虑到头结点也可能是重复的节点,所以需要设置一个头结点之前的节点。之后需要3个指针
pre,cur和next
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL||pHead->next==NULL) //判断是否是空节点或者只有一个节点 return pHead; ListNode* prehead=new ListNode(0); //设置头前节点 prehead->next=pHead; ListNode* pre=prehead; ListNode* cur=pre->next; ListNode* next=cur->next; while(cur!=NULL&&next!=NULL) //如果当前节点或者next节点为空跳出循环 { if(cur->val==next->val){ //如果出现重复节点一直向后找到以一个cur不等于next的节点 while(next!=NULL&&cur->val==next->val) { cur=cur->next; next=next->next; } if(next==NULL) cur=NULL; else //注意此时cur节点也是需要删除的节点,所以令cur=next;并且需要再次进行判断是否与后面的重复。 cur=next; next=next->next; } else //如果不出现重复则将pre和cur链接,并且pre和cur和next分别向后移动,注意边界。 { pre->next=cur; pre=cur; cur=next; if(next!=NULL) next=next->next; } } pre->next=cur; //最后需要将pre和cur链接起来,对于上面的判断条件,最后一步没有链接起来。 return prehead->next; }};
0 0
- 删除链表中重复的节点
- 删除链表中重复的节点
- 删除链表中重复的节点
- 删除链表中重复的节点
- 删除链表中重复的节点
- 删除链表中重复的节点
- 删除链表中重复的节点
- 删除链表中重复的节点
- 删除链表中重复的节点。
- 删除链表中重复的节点
- 删除链表中重复的节点
- 【链表】删除链表中连续重复的节点
- 删除单向链表中重复的节点
- 57 - 删除链表中重复的节点
- 笔试题:删除链表中重复的节点
- 剑指offer-删除链表中重复的节点
- 剑指offer-----删除链表中重复的 节点
- Python :删除链表中重复的节点
- Android Studio 打包在eclipse中打过包的项目
- log4j MDC用户操作日志追踪配置
- 关于php项目的开发回顾总结第一章-----初探
- 翻译
- python 中 常用到的 numpy 函数 整理
- 删除链表中重复的节点
- phpstorm配置远程xdebug
- JavaScript入门指南---(二)、创建脚本
- Share Extension编程
- Optimal Array Multiplication Sequence UVA
- 初步创建远程仓库,将本地仓库上传到git 远程仓库里
- centos7配置以及安装mysql5.7
- json字符串传到前台input
- 【3月17日】通过反射机制了解泛型的本质