这个部分是链表的基础,对于链表,首先leetcode上已经给我们在开头定义好了链表的结构并注释掉了,是下面这个样子的结构:
type struct ListNode {
Val int
Next *ListNode
}
主要就是定义了链表的值以及下一个节点。
题目
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
示例
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
解析
这道题其实就是按照顺序判断,链表中的每个节点的值是不是等于给定的值,是的话就跳过,再去取下一个值即可。
但是在写代码的时候需要注意,首先要设置哑节点,因为链表的头节点有可能被删除;
另外就是。如果 当前的下一个节点不为空且下一个节点的节点值等于给定的val,则需要删除下一个节点;否则将当前节点后移一位;
注意代码中比较的是哪个(next)
func removeElements(head *ListNode, val int) *ListNode {
dummy := &ListNode{} //这里应该是为了修改原有的链表,省空间
dummy.Next = head
cur := dummy
for cur != nil && cur.Next != nil {
if cur.Next.Val == val {
cur.Next = cur.Next.Next
} else {
cur = cur.Next
}
}
return dummy.Next
}
注意要使用头节点来统一处理,不然还得单独处理特殊情况