
首先创建一个虚拟头节点,让它的next指向原链表的头节点head,然后用current指针从虚拟头节点开始遍历。当current.next存在时,检查current.next.val是否等于要删除的值val如果等于,就将current.next指向current.next.next,从而跳过要删除的节点;如果不等于,就将current指针后移一位。最后返回虚拟头节点的next,即为处理后的链表头节点。这种方法可以统一处理头节点和中间节点的删除操作,避免了单独对头节点进行特殊判断。

首先判断索引index是否合法(小于0或者大于链表长度self.size),如果不合法就直接返回。然后创建要添加的新节点new_node。如果要添加的位置是索引0(链表头):让新节点的next指向当前的头节点self.head;再将头节点self.head更新为新节点。如果要添加的位置不是索引0:用current指针从链表头开始遍历,通过循环找到索引为index - 1的节点;让新节点的next指向current.next;再将current.next指向新节点,从而将新节点插入到指定位置。这种方法通过遍历找到插入位置的前驱节点,实现了在链表中间指定位置添加节点的操作。