题意:
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
分析:
这里与删除重复节点区分开来,那题是有序,
而这里是无序,所以相邻节点,行不通的
思路:(这里用哈希表法)
1.先判断,链表是否为空,是,则返回null
2.创建一个set ,存放链表元素的值
3.当头结点head .next 不为空时。开始循环
4.如果当前节点不存在,则添加,之后h往后移
如果当前节点存在,则删除。
5.最后返回头结点head
(后续重复节点以删除,所以返回head即可)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeDuplicateNodes(ListNode head) {
if(head == null) {return null;} //判断是否为空
Set<Integer> set = new HashSet<>(); //生成哈希表,set用来存放节点的值
ListNode h = head;
set.add(h.val); //先把头结点的值存进去
while(h.next != null){
ListNode cur = h.next;
if(set.add(cur.val)){
h = h.next;
}else{
h.next = cur.next;
}
}
return head;
}
}