leetcode 每日一题 3.25
知识点:
删除排序链表中的重复元素(双指针的做法)
最好可以用笔重新去演算一个这个算法的过程。
AC代码:
class Solution {
public:
// 判断中间元素个数的时候采用 双指针
ListNode* deleteDuplicates(ListNode* head) {
// 建立虚拟 头 结点
auto dummy = new ListNode(-1);
dummy -> next = head;
auto p = dummy;
while(p->next) {
auto q = p -> next -> next;
// 当 q 指针存在 并且 值还相等的时候,q 指针继续往下走
while(q && q -> val == p -> next -> val)
q = q -> next;
// 当只有一个值的时候,p指针继续往下走
if(p->next->next == q)
p = p -> next;
p->next = q;
}
return dummy -> next;
}
};