题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
http://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
-
设置头节点方便处理
-
双指针,pre指向已处理好的链表的最后一个节点,p指向当前要判断的节点
-
while循环遍历链表,停止条件是p为空或p->next为空
-
当当前节点与下一节点相等时,while循环找到与当前节点不等的节点tmp,将pre指向tmp,当前节点更新为tmp,继续判断当前节点是否为重复节点
-
当当前节点与下一节点不等时,pre和p同时前进一位即可
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
// write code here
ListNode* vhead = new ListNode(-1);
vhead->next = head;
ListNode* p = head;
ListNode* pre = vhead;
while(p && p->next){
if(p->val == p->next->val){
ListNode* tmp = p->next;
while(tmp && tmp->val == p->val){
tmp = tmp->next;
}
pre->next = tmp;
p = tmp;
}else{
pre = pre->next;
p = p->next;
}
}
return vhead->next;
}
};