(剑指Offer)面试题57:删除链表中的重复结点
2015-08-05 21:48
661 查看
题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表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=3AC代码:
(没有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)面试题56:链表中环的入口结点
- 黑马程序员—JAVA基础—反射
- 黑马程序员—JAVA基础—io流
- 黑马程序员-面向对象基础知识1
- 汽车之家一道SQL 面试题,大家闲来无事都来敲一敲
- 常见笔试面试
- [置顶] Java开发人员面试题分析汇总(持续更新中)
- 黑马程序员---OC set方法的内存管理
- 阿里前端面试题
- 《程序员修炼之道》读书笔记
- 【转载】程序员的成长和代码行数的关系
- 黑马程序员---OC内存管理中的MRC
- 黑马程序员---OC封装
- 黑马程序员---OC类方法
- 去了大公司就一定能学到很牛的技术么?
- 黑马程序员 oc随记 关于实例变量初始化
- 中年程序员的困惑
- 十大最容易让人误解的职业
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?