题目
题目链接
删除有序链表中重复的元素-II_牛客题霸_牛客网
题目描述
代码实现
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* deleteDuplicates(ListNode* head) {
// write code here
if(head == nullptr) return head;
ListNode *phead = new ListNode(-1), *cur = phead;
phead->next = head;
while(cur->next && cur->next->next){
if(cur->next->val == cur->next->next->val){
int digit = cur->next->val;
while(cur->next && cur->next->val == digit)
cur->next = cur->next->next;
}
else
cur = cur->next;
}
return phead->next;
}
};
思路分析
1、首先需要构造一个哨兵位的头节点,避免头节点删除的讨论
2、最开始cur和phead位于同一位置,也就是说待会cur之前的节点都是不同的。后边判断操作的即cur后边的两个节点
3、对于删除重复数字,首先拿到该数字,再将cur->next,即将cur连在该数字节点的后边位置。这里便是一个循环。对于正常情况,cur向后挪动一个位置即可。
4、最后,考虑特殊情况,当头节点为空的时候,直接返回空节点即可。