标签:terminal dde 存在 public lis lse nullptr ref struct
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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) {
}
};
标签:terminal dde 存在 public lis lse nullptr ref struct
原文地址:https://www.cnblogs.com/hesper/p/10536610.html