题目
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况
的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。
示例
输入:1 -> 2 -> 3 -> 3 -> 4-> 4 -> 5
输出:1 -> 2 -> 5
代码实现
主要思路
- 首先题目要求删除所有重复元素,并不是保留一个重复元素
- 创建一个虚拟头结点来构建新链表
- 然后遍历原链表,当前节点值不等于下一个节点值,才将当前节点加到新链表
- 如果当前节点值等于下一个节点值,通过循环不断的更新当前节点
public ListNode deleteDuplicates(ListNode head) {
//链表为null或者只有一个节点
if(head == null || head.next == null){
return head
}
ListNode dummmty = new ListNode()
ListNode tail = dummmty
while(head != null){
//此时head.next == null,说明head可能是最后一个节点
if(head.next == null || head.val != head.next.val){
//加入到新链表中
tail.next = head
tail = tail.next
}
//此时说明有重复元素,不断更新head
while(head.next!= null && head.val == head.next.val){
head = head.next
}
//循环完毕,此时head指向重复元素中的最后一个元素
//然后更新head,指向不是重复元素
head = head.next
}
tail.next = null
return dummmty.next
}