您的位置:首页 > Web前端

剑指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;
}
};
分析:看着感觉确实不难,,,写起来来还是花了大约一个小时,切记眼高手低啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: