java怎么删除单链表的重复节点
可以使用两个指针来遍历单链表并删除重复节点。具体步骤如下:
- 定义两个指针,
curr
和next
,初始化时都指向链表的头节点。 - 使用一个
HashSet
保存已经出现过的节点的值,初始时为空。 - 遍历链表,当
curr
不为空时执行以下步骤:- 如果
curr
的值已经存在于HashSet
中,说明当前节点是重复的,将next
节点的值赋给curr
节点,然后将next
节点指向下一个节点。 - 如果
curr
的值不存在于HashSet
中,将curr
的值添加到HashSet
中,并将curr
节点指向next
节点,然后将next
节点指向下一个节点。
- 如果
- 返回链表的头节点。
下面是一个示例的Java代码实现:
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return null;
}
ListNode curr = head;
ListNode next = head.next;
Set<Integer> set = new HashSet<>();
set.add(curr.val);
while (next != null) {
if (set.contains(next.val)) {
curr.val = next.val;
curr.next = next.next;
} else {
set.add(next.val);
curr = curr.next;
}
next = next.next;
}
return head;
}
请注意,此代码假设ListNode
类的定义如下:
public class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
相关问答