可以使用两个指针来遍历单链表并删除重复节点。具体步骤如下:
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; } }