从Leetcode 每日一题练习继续讨论:
3217. 从链表中移除在数组中存在的节点
3217. Delete Nodes From Linked List Present in Array
粗体文本### 题解
本题先保存nums中都有哪些数字, 本题的关键在于如何快速判断某个数是否在nums中, 考虑到nums范围到10^5. 因此可以直接用10^5的布尔数组, 下标表示对应的数字, true表示存在, false表示不存在. 当然用哈希表也是可以的. 随后用双指针法对链表中的节点进行遍历并删掉包含在nums中的节点即可.
代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func modifiedList(nums []int, head *ListNode) *ListNode {
var right, left *ListNode
numbool := make([]bool, 100001)
for _,num := range nums{
numbool[num] = true
}
left = nil
right = head
for right != nil{
if numbool[right.Val]{
if left == nil{
head = right.Next
}else{
left.Next = right.Next
}
}else{
left = right
}
right = right.Next
}
return head
}