目录
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
思路
注意这题是去掉重复的节点(相同节点全部删除),而不是简单的去重,所以在遍历节点过程中,每一个节点都需要向前探测,直到节点值不等于后缀节点时结束,并对这一过程加入计数器,如果计数器大于 1 ,则说明是重复的节点,直接删除掉,如计数器等于 0 ,则表示不重复,直接加入目标链表;
代码
class Solution {
public ListNode
deleteDuplicates(ListNode head
) {
ListNode root
, r
= new ListNode(0), p
= head
;
root
= r
;
while (p
!= null
){
ListNode q
= p
;
int cnt
= 0;
while (q
.next
!= null
&& q
.val
== q
.next
.val
) {
q
= q
.next
;
cnt
++;
}
p
= q
.next
;
if (cnt
== 0){
r
.next
= q
;
r
= q
;
}
}
r
.next
= null
;
return root
.next
;
}
}