82. 刪除排序連結串列中的重複元素 II
阿新 • • 發佈:2020-12-29
技術標籤:Leetcode
82. 刪除排序連結串列中的重複元素 II
思路:預定一個preHead指向head
如果發現我的next->val==next->next->val
那派出個快指標去找不重複的位置,preHead指向它,再次進行判斷,如果符合標準,那麼做指標指向這個節點
第一次寫的成坨的程式碼
/*
思路:預定一個preHead指向head
如果發現我的next->val==next->next->val
那派出個快指標去找不重複的位置,preHead指向它,再次進行判斷,如果符合標準,那麼做指標指向這個節點
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode preHead(0);
preHead.next = head;
ListNode* pleft = &preHead;
ListNode* pright = pleft;
while (pleft->next != NULL && pleft->next->next != NULL)
{//找它後面兩個
if (pleft->next-> val == pleft->next->next->val)
{ //如果這倆相等的話,跳過這些相等的
pright = pleft->next->next->next;
while (pright != NULL)
{
if (pright->val != pleft->next->val)
{
break;
}
pright = pright->next;
}
pleft->next = pright;
}
else {
pleft = pleft->next;
}
}
return preHead.next;
}
};
改進一下發現可以直接弄成兩個相鄰的節點做判斷,如果右節點的next和他的next一樣那麼又節點就跑起來了
將pright利用起來,他負責指向pleft後面的一個節點
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode preHead(0);
preHead.next = head;
ListNode* pleft = &preHead;
ListNode* pright = pleft->next;//直接指定相鄰的節點
while (pleft->next != NULL && pright->next != NULL)
{
if (pleft->next->val == pright->next->val)
{ //如果這倆相等的話,跳過這些相等的
while (pright->next != NULL)
{
if (pright->next->val != pleft->next->val)
{ //找到了下一個不相同的節點了
break;
}
pright = pright->next;
}
pleft->next = pright->next;
}
else {
pleft = pleft->next;
}
//找它後面兩個
pright = pleft->next;
}
return preHead.next;
}
};