原题链接:203. 移除链表元素
思路:
和链表相关的题目都可使用虚拟头节点virtual来解决
创建一个新的虚拟头节点,值为0,指针指向题目给的链表头节点
从虚拟头节点开始遍历,
如果虚拟头节点指向的节点的元素和Val相等,则代表遇见需要移除的元素了,直接移除
if virtual.Next.Val == val {virtual.Next = virtual.Next.Next}
如果不是,则继续遍历链表
最终返回虚拟头节点指向的下一个节点,也就是原链表(此时为移除元素完成的链表)
全代码:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeElements(head *ListNode, Val int) *ListNode {
cur := &ListNode{0,head}//创建虚拟头节点,值为0,Next指向head
virtual := cur
for virtual.Next !=nil{
if virtual.Next.Val == Val{
virtual.Next = virtual.Next.Next
}else{
virtual = virtual.Next
}
}
return cur.Next
}