题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5
思路分析
直接比较删除
循环判断当前节点的后继节点与后继节点的后继节点的值是否相同。如果相同,继续往后判断接下来的相邻节点是否相同。将当前节点的next域赋值为第一个不相同的节点。
if(cur->next->val == cur->next->next->val)
{
int tmp = cur->next->val;
while(cur->next != NULL && cur->next->val == tmp)
{
cur->next = cur->next->next;
}
}
代码
/*
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* res = new ListNode(0);
res->next = pHead;
ListNode* cur = res;
while(cur->next != NULL && cur->next->next!= NULL)
{
if(cur->next->val == cur->next->next->val)
{
int tmp = cur->next->val;
while(cur->next != NULL && cur->next->val == tmp)
{
cur->next = cur->next->next;
}
}
else{
cur = cur->next;
}
}
return res->next;
}
};