问题:
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1→1→2,返回1→2.
给出的链表为1→1→2→3→3,返回1→2→3.
数据范围:链表长度满足 1000≤n≤100,链表中任意节点的值满足 ∣val∣≤100
进阶:空间复杂度 O(1),时间复杂度 O(n)
思路:
利用set的无重复的特性进行封装,同时使用LinkedHashSet,保证按照顺序存储,且不出现重问题,保证能够去重。
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
// write code here
Set<Integer>set=new LinkedHashSet<>();
ListNode node=head;
while (node!=null){
set.add(node.val);
node=node.next;
}
ListNode listNode=new ListNode(-1);
ListNode h=listNode;
Iterator<Integer> in=set.iterator();
while (in.hasNext()){
ListNode listNode1=new ListNode(in.next());
listNode.next=listNode1;
listNode=listNode.next;
}
return h.next;
}
}