移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
题解
对给定的链表进行一次遍历,并用一个哈希集合(HashSet)来存储所有出现过的节点。
从链表的头节点 head 开始进行遍历,遍历的指针记为 pos。由于头节点一定不会被删除,因此直接放入set集合里面。
定义指针表示当前节点的下一个节点,判断是否存在集合中。如果存在则查找下一个节点,
否则当前节点的next指向当前节点的下一节点的下一节点
代码展示
public ListNode removeDuplicateNodes(ListNode head) {
if (head==null)
return head;
HashSet<Integer> set = new HashSet<>();
ListNode dummyNode = head;
set.add(head.val);
while (dummyNode.next!=null){
ListNode cur = dummyNode.next;
if (set.add(cur.val))
dummyNode = dummyNode.next;
else
dummyNode.next = dummyNode.next.next;
}
dummyNode.next = null;
return head;
}