(剑指Offer)面试题57:删除链表中的重复结点
题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:
由于头结点有可能被删除,因此需要创建新的头结点pNew;
遍历链表,每遍历一个结点pCur,且pCur!=NULL,做以下判断:
如果它的下个结点不为空,且当前结点和下个结点的值相等,那么说明这两个是重复的结点,需要继续往下遍历,一直找到不重复的结点为止;
否则,pNew的下个结点指向当前结点pCur,即pNew->next=pCur,pNew=pNew->next;
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/fc533c45b73a41b0b44ccba763f866ef?rp=3
AC代码:
(没有delete操作,容易造成内存泄露)
/*
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* pNew= new ListNode(0);
ListNode* pTmp=pNew;
ListNode* pCur=pHead; while(pCur){
if(pCur->next!=NULL && pCur->val==pCur->next->val){
ListNode* pNext=pCur->next;
while(pNext->next!=NULL && pNext->val==pNext->next->val)
pNext=pNext->next;
pCur=pNext->next;
}
else{
pTmp->next=pCur;
pTmp=pTmp->next;
pCur=pCur->next;
}
} pTmp->next=NULL; return pNew->next;
}
};
(添加delete操作,避免内存泄露)
/*
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* pNew= new ListNode(0);
ListNode* pTmp=pNew;
ListNode* pCur=pHead;
ListNode* pDel=NULL; while(pCur){
if(pCur->next!=NULL && pCur->val==pCur->next->val){
pDel=pCur;
ListNode* pNext=pCur->next;
delete pDel;
while(pNext->next!=NULL && pNext->val==pNext->next->val){
pDel=pNext;
pNext=pNext->next;
delete pDel;
}
pDel=pNext;
pCur=pNext->next;
delete pDel;
}
else{
pTmp->next=pCur;
pTmp=pTmp->next;
pCur=pCur->next;
}
} pTmp->next=NULL; return pNew->next;
}
};
(剑指Offer)面试题57:删除链表中的重复结点的更多相关文章
- 剑指offer——面试题18:删除链表的节点
#include"List.h" void DeleteNode(ListNode** pHead,ListNode* pToBeDeleted) { if(*pHead==nul ...
- 剑指offer(56)删除链表中重复的节点
一直忘记更新了,把剑指offer更新完吧.... 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3-&g ...
- 【剑指Offer】56、删除链表中重复的结点
题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4-> ...
- 剑指offer面试题15:链表中倒数第K个节点
题目:输入一个链表,输出该链表的倒数第K个节点.为了符合大多数人的习惯,本题从1开始计数,即链表尾节点是倒数第一个节点. 解题思路: 解法一:一般情况下,单向链表无法从后一个节点获取到它前面的节点,可 ...
- 【剑指offer 面试题15】链表中倒数第K个结点
思路: 定义两个指针同时指向head,第一个指针先走K-1步,随后二个指针同时移动,当第一个指针到末尾处时,第二个指针所指向的即为倒数第K个结点. #include <iostream> ...
- 剑指offer——面试题22:链表中倒数第k个节点
注意代码的鲁棒性! 函数: ListNode* TheLastKthNode(ListNode* pHead,int k) { ) return nullptr; ListNode* quickNod ...
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- 剑指Offer面试题:14.链表的倒数第k个节点
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...
- 剑指offer 面试题35.复杂链表的复制
时间O(N),空间O(N) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomList ...
随机推荐
- Cookie的用法
string strCookie=""; //创建一个名为user HttpCookie userCookie=new HttpCookie("user"); ...
- 初识Linux 基础操作
Linux常用指令: 在Linux中如果不懂基础命令,在Linux中将寸步难行,下面是我在初学Linux系统时总结的一些基本命令. 1.基础命令 ls ...
- java 安全 技术
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 加密对应的类 是 Cipher ,意思 是加密的意思.这个类 在 javax.cryp ...
- [BZOJ1799][AHOI2009]同类分布(数位DP)
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MBSubmit: 1635 Solved: 728[Submit][S ...
- 素数筛 codevs 1675 大质数 2
1675 大质数 2 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 小明因为没做作业而被数学 ...
- Codeforces Beta Round #10 B. Cinema Cashier 暴力
B. Cinema Cashier 题目连接: http://www.codeforces.com/contest/10/problem/B Description All cinema halls ...
- Acdream 1738 世风日下的哗啦啦族I 树套树
世风日下的哗啦啦族I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...
- Java---线程多(工作内存)和内存模型(主内存)分析
首先解读Java内存模型(这里区别于JVM的内存模型,堆.栈.工作区) Java 内存模型来屏蔽掉各种硬件和操作系统的内存差异,达到跨平台的内存访问效果.JLS(Java语言规范)定义了一个统一的内存 ...
- ookla 网络上传下载 PING 测试
1.登陆http://www.ookla.com/ 2.点选Explore Speedtest Custon 3. 1.start for free 或者 2.measure your network ...
- java序列化 SerializeUtil
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; ...