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;
}
};