编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
代码:
1:使用中间缓存
public static ListNode<Integer> removeDuplicateNodes(ListNode<Integer> head) {
Set<Integer> set=new HashSet<Integer>();
// 重点是使用变量代替head,不然head会一直改变
ListNode cur=head;
while(cur!=null && cur.next!=null){
set.add((Integer) cur.val);
if(set.contains(cur.next.val)){
cur.next=cur.next.next;
}else{
cur=cur.next;
}
}
return head;
}
2:不使用中间缓存
使用个临时节点,作为head;
public static ListNode<Integer> removeDuplicateNodes2(ListNode<Integer> head) {
ListNode pre=head;
while(pre!=null){
ListNode tmp=pre;
while(tmp.next!=null){
if(tmp.next.val==pre.val){
tmp.next=tmp.next.next;
}else{
tmp=tmp.next;
}
}
pre=pre.next;
}
return head;
}
网友评论