NC24 删除有序链表中重复的元素-II
描述
给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为1 \to 2\to 3\to 3\to 4\to 4\to51→2→3→3→4→4→5, 返回1\to 2\to51→2→5.
给出的链表为1\to1 \to 1\to 2 \to 31→1→1→2→3, 返回2\to 32→3.
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
// write code here
if(head == null || head.next == null){
return head ;
}
ListNode dummy = new ListNode(0) ;
ListNode tail = dummy ;
int curt = -1 ;
//Set<Integer> set = new HashSet<>();
while(head != null){
// set.add(head.val);
if(tail.val != head.val && head.val != head.next.val && head.val != curt){
tail.next = new ListNode(head.val) ;
tail = tail.next ;
}
curt = head.val ;
head = head.next ;
if(head.next == null){
if(head.val != curt){
tail.next = new ListNode(head.val) ; ;
}
break ;
}
}
return dummy.next ;
}
}
该博客主要讨论如何删除升序排列链表中的重复元素,只保留唯一出现的节点。提供的解决方案通过创建一个哑节点作为新链表的头节点,并使用一个辅助节点`tail`跟踪新链表的有效部分。在遍历原始链表时,只有当当前节点的值不等于前一个节点的值且不等于下一个节点的值时,才会将其添加到新链表中。最后返回新链表的头部节点。
1555

被折叠的 条评论
为什么被折叠?



