AcWing 29. 删除链表中重复的节点
原题链接
中等
作者:
梦想黑洞
,
2020-10-23 17:26:42
,
所有人可见
,
阅读 391
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
// 下面注释中:连续重复的节点是一段
public ListNode deleteDuplication(ListNode head) {
ListNode dummy=new ListNode(1);
dummy.next=head;
// 设置虚拟头结点的意义在于边界结点的判断
ListNode l=dummy;
ListNode r;
while(l.next!=null){
r=l.next;
// l指针指向上一段的最后一个节点,r指针最终指向下一段的第一个节点
while(r!=null && l.next.val==r.val) r=r.next;
if(l.next.next==r){ //当前段长度为1
l=l.next;
}else{ //当前段长度大于1
l.next=r;
}
}
return dummy.next;
}
}