leetcode刷题 82.删除排序链表中的重复元素Ⅱ
作者:互联网
题目解析:
因为本题是使用链表,且题目要求删除连续重复数字,由此可以想到我们应该使用双指针的方法。
代码实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head)
{
if(head==nullptr) //检测链表是否为空
return p->next;
ListNode *p = new ListNode(0);
p->next = head; //新建空指针使其指向头节点
ListNode *temp = p; //设置临时指针,指向当前指针
ListNode *left = head; //设置双指针左侧
ListNode *right = head->next; //设置双指针右侧
while( right ) //循环
{
if(left->val==right->val) //如果双指针相同
{
while(right&&left->val==right->val) //这是一个比较好的用来检测连续存在相同数的方法
right=right->next;
temp->next=right;
left=right;
if(right)
right=right->next;
}
else //未出现重复时移动指针
{
temp=left;
left=right;
right=right->next;
}
}
return p->next;
}
};
标签:right,ListNode,val,next,链表,82,left,leetcode,指针 来源: https://blog.csdn.net/m0_48530561/article/details/122387088