use crate::linked_list::singly_linked_list::ListNode;
pub fn insert_at<T: Clone>(head: &mut Option<Box<ListNode<T>>>, pos: usize, val: T) {
let mut dummy = Box::new(ListNode::new(val.clone()));
dummy.next = head.take();
let mut curr = &mut dummy;
for _ in 0..pos {
if curr.next.is_none() {
break;
}
curr = curr.next.as_mut().unwrap();
}
let mut node = Box::new(ListNode::new(val));
node.next = curr.next.take();
curr.next = Some(node);
*head = dummy.next;
}
pub fn delete_at<T: Clone + Default>(head: &mut Option<Box<ListNode<T>>>, pos: usize) {
let mut dummy = Box::new(ListNode::new(Default::default()));
dummy.next = head.take();
let mut curr = &mut dummy;
for _ in 0..pos {
if curr.next.is_none() {
break;
}
curr = curr.next.as_mut().unwrap();
}
if curr.next.is_some() {
curr.next = curr.next.as_mut().unwrap().next.take();
}
*head = dummy.next;
}