题目 - Remove Duplicates From Sorted List
难度:简单
分析
直接法
这是一个简单的问题,仅测试你操作列表的结点指针的能力。由于输入的列表已排序,因此我们可以通过将结点的值与它之后的结点进行比较来确定它是否为重复结点。如果它是重复的,我们更改当前结点的 next 指针,以便它跳过下一个结点并直接指向下一个结点之后的结点。
set去重
通过 HashSet 来存储所有出现过的节点
代码
直接法
func deleteDuplicates(_ head: ListNode?) -> ListNode? {
var current = head
while current != nil && current!.next != nil {
if current?.val == current?.next!.val {
current?.next = current?.next?.next
}else {
current = current!.next
}
}
return head
}
set 去重
func removeDuplicateNodes(_ head: ListNode?) -> ListNode? {
guard let head = head else {
return nil
}
var map: [Int: ListNode] = [:]
var p = head
map[p.val] = p
while p.next != nil {
if map[p.next!.val] != nil {
p.next = p.next!.next
}else {
map[p.next!.val] = p.next!
p = p.next!
}
}
return head
}