剑指offer——链表-删除链表中重复的结点
2017-10-23 21:41
375 查看
题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
程序:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead == NULL)
return NULL;
ListNode *pNode = pHead;
ListNode *preNode = NULL; //指向 pNode 的前一个结点
// preNode->next = pNode;
while(pNode != NULL)
{
ListNode *pNext = pNode->next;
bool Tobedelete = false;
if(pNext != NULL && pNode->val == pNext->val)
Tobedelete = true;
if(!Tobedelete)
{
//preNode->next = pNode; // 就因为这一句写错了,就多折腾了二十分钟啊!!!!
preNode = pNode;
pNode = pNode->next;
}
else{
int value = pNode->val;
ListNode* TobeDeleNode = pNode;
while(TobeDeleNode != NULL && TobeDeleNode->val ==value)
{
pNext = TobeDeleNode->next;
delete TobeDeleNode;
TobeDeleNode = NULL;
TobeDeleNode = pNext;
}
if(preNode == NULL) // 第一个结点就删除了
{
pHead = pNext;
}
else{
preNode->next = pNext;
}
pNode = pNext;
}
}
return pHead;
}
};
分析:看着感觉确实不难,,,写起来来还是花了大约一个小时,切记眼高手低啊
程序:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead == NULL)
return NULL;
ListNode *pNode = pHead;
ListNode *preNode = NULL; //指向 pNode 的前一个结点
// preNode->next = pNode;
while(pNode != NULL)
{
ListNode *pNext = pNode->next;
bool Tobedelete = false;
if(pNext != NULL && pNode->val == pNext->val)
Tobedelete = true;
if(!Tobedelete)
{
//preNode->next = pNode; // 就因为这一句写错了,就多折腾了二十分钟啊!!!!
preNode = pNode;
pNode = pNode->next;
}
else{
int value = pNode->val;
ListNode* TobeDeleNode = pNode;
while(TobeDeleNode != NULL && TobeDeleNode->val ==value)
{
pNext = TobeDeleNode->next;
delete TobeDeleNode;
TobeDeleNode = NULL;
TobeDeleNode = pNext;
}
if(preNode == NULL) // 第一个结点就删除了
{
pHead = pNext;
}
else{
preNode->next = pNext;
}
pNode = pNext;
}
}
return pHead;
}
};
分析:看着感觉确实不难,,,写起来来还是花了大约一个小时,切记眼高手低啊
相关文章推荐
- 《剑指offer》——删除链表中重复的结点
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
- (剑指Offer)面试题57:删除链表中的重复结点
- 剑指offer——删除链表中重复的结点(好题!)
- 《剑指Offer》学习笔记--面试题57:删除链表中重复的结点
- 《剑指offer》——删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 《剑指offer》-删除单链表中重复的结点
- 《剑指offer》:删除链表中重复的结点
- 《剑指offer》-删除链表中重复的结点
- 剑指offer——56.删除链表中重复的结点
- 剑指Offer:删除链表中重复的结点
- 剑指offer:删除链表中重复的结点
- 剑指offer——删除链表中重复的结点
- 剑指offer 删除链表中重复的结点
- 剑指offer-面试题57:删除链表中重复的结点
- 《剑指offer》删除链表中重复的结点
- 《剑指offer》:[57]删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 剑指offer--面试题57:删除链表中重复的结点