1、相似题
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
//判空
if(head == NULL )
return nullptr;
ListNode* p1 = head;
ListNode* p2 = p1->next;
while(p2)
{
if(p1->val != p2->val)
{
p1->next = p2;
p1 = p1->next;
}
p2 = p2->next;
}
p1->next = p2;
return head;
}
};
2、JZ76 删除链表中重复的节点
/*
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 nullptr;
ListNode* p = new ListNode(-1);
p->next = pHead;
ListNode* p1 = p;
while(p1->next)
{
//设置p2指向p1的下一个的下一个节点
ListNode* p2 = p1->next->next;
//当p2不为空 且 p1的下一个的下一个节点的值等于p2的值 时循环
while(p2 && p1->next->val == p2->val)
p2 = p2->next; //p2往后移动
//判断p2是否往后移动,如果没有,则说明没有相同的节点出现,让p1往后移动
if(p1->next->next == p2)
p1 = p1->next;
//如果p2往后移动,就说明出现了重复的节点
//那么p1和p2之间的节点就都是重复的节点,都是需要删除的节点
else
p1->next = p2;
}
return p->next;
}
};
标签:p2,JZ76,ListNode,val,next,链表,p1,节点
From: https://www.cnblogs.com/H43724334/p/18133348