题目描述
给定一个已排序的链表的头 head
, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
示例一:
输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5]
示例二:
输入:head = [1,1,1,2,3] 输出:[2,3]
题目分析
由于本题给出的是排序好的链表,所以重复数字的节点会在一起出现,当遇见两个节点重复时,直接调用循环删除即可
由于本题的头节点可能会发生改变,所以需要创造一个哑节点
java解法
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null) return head;
ListNode pre = new ListNode(0, head);
ListNode current = pre;
while(current.next != null && current.next.next != null){
if(current.next.val == current.next.next.val){
int x = current.next.val;
//逐个删除
while(current.next != null && current.next.val == x){
current.next = current.next.next;
}
}else{
current = current.next;
}
}
return pre.next;
}
}