删除链表中重复的结点
Posted hesper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除链表中重复的结点相关的知识,希望对你有一定的参考价值。
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
待整理
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (nullptr == pHead)
return nullptr;
ListNode *pPreNode = nullptr;
ListNode *pNode = pHead;
while(nullptr != pNode) {
ListNode *pNext = pNode->next;
bool needDelete = false;
if ((nullptr != pNext) && (pNode->val == pNext->val)) {
needDelete = true;
}
if (!needDelete) { // 不需要删除
pPreNode = pNode;
pNode = pNode->next;
}
else { // 需要删除
int val = pNode->val;
ListNode *pToBeDel = pNode;
while ((nullptr != pToBeDel) && (pToBeDel->val == val)) {
pNext = pToBeDel->next;
delete pToBeDel;
pToBeDel = nullptr;
pToBeDel = pNext;
}
if (pPreNode == nullptr) {
pHead = pNext;
}
else {
pPreNode->next = pNext;
}
pNode = pNext;
}
}
return pHead;
}
};
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
以上是关于删除链表中重复的结点的主要内容,如果未能解决你的问题,请参考以下文章