标签:div 重复节点 ret src 头结点 image info http for
可能会把头结点删掉的问题,都会定义一个虚拟头节点
p:上一次保留节点的最后一个位置
q:下一段的第一个节点,用来把下一段全部扫描结束 ,只要相同q就一直向后走。p到q为一段
本次用来3个节点,一个虚拟节点,另外的p、q用来遍历是否存在重复节点。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/***采用了虚拟头结点,此外的p\q两个节点用来遍历重复的结点 ****/
class Solution {
public:
ListNode* deleteDuplication(ListNode* head) {
auto dummy =new ListNode(-1);
dummy->next = head;
auto p = dummy;
while(p->next){ //p:上一次保留节点的最后一个位置
auto q = p->next; //下一段的第一个节点,用来把下一段全部扫描结束,注:p到q为一段
while(q && p->next->val == q->val ) q = q->next;
if(p->next->next == q)//当前段不存在重复的结点
p = p->next;
else p->next = q;
}
return dummy->next;
}
};
标签:div 重复节点 ret src 头结点 image info http for
原文地址:https://www.cnblogs.com/make-big-money/p/12303836.html