可以使用兩個指針來遍歷單鏈表并刪除重復節點。具體步驟如下:
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;
}
}