題目
給定一個整數陣列 nums 及連結串列的起始點 head 。請返回修改後連結串列的終點 head ,該修改需移除所有與陣列 nums 中數值相符的節點。
我的練習
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def modifiedList(self, nums: List[int], head: Optional[ListNode]) -> Optional[ListNode]:
to_remove = set(nums)
# dummy node,避免節點頭被刪除
dummy = ListNode(0, head)
current = dummy
while current.next:
if current.next.val in to_remove:
# 跳過下一個節點
current.next = current.next.next
else:
current = current.next
return dummy.next
func modifiedList(nums []int, head *ListNode) *ListNode {
toRemove := make(map[int]struct{})
for _, num := range nums {
toRemove[num] = struct{}{}
}
// dummy node
dummy := &ListNode{Next: head}
current := dummy
for current.Next != nil {
if _, exists := toRemove[current.Next.Val]; exists {
// 跳過下一個節點
current.Next = current.Next.Next
} else {
current = current.Next
}
}
return dummy.Next
}
use std::collections::HashSet;
impl Solution {
pub fn modified_list(nums: Vec<i32>, head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
let to_remove: HashSet<i32> = nums.into_iter().collect();
// dummy node
let mut dummy = Box::new(ListNode::new(0));
dummy.next = head;
let mut current = &mut dummy;
while let Some(next_node) = current.next.as_mut() {
if to_remove.contains(&next_node.val) {
// 跳過下一個節點
current.next = next_node.next.take();
} else {
current = current.next.as_mut().unwrap();
}
}
dummy.next
}
}