题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
存在重复的节点,但不确定有几个重复的节点,因此可以保存当前的节点值,然后逐个比较将重复的节点全部删除即可。
用一个result链表来保存删除后的不重复节点,如果result为空,那么将当前节点链接到result链表中,否则将当前节点连接到result->next;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode * deleteDuplication(ListNode* pHead)
{
if (pHead == nullptr)
return nullptr;
ListNode* result = nullptr;
ListNode* cur = pHead;
while (cur != nullptr)
{
//如果存在相同的节点 记录当前值
if (cur->next != nullptr&&cur->val == cur->next->val)
{
int repeat_val = cur->val;
while (cur != nullptr&&cur->val == repeat_val)
{
delete cur;
cur = cur->next;
}
}
else
{
result = cur;
cur = cur->next;
}
//result链表来保存不重复的节点 如果为空 当前的节点存入 当做头结点
//如果不为空 存入下一个不为空的节点
if (result == nullptr)
{
pHead = cur;
}
else
{
result->next = cur;
}
}
return pHead;
}
};