给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
初看这个题,我第一反应是要删除其中的节点,就一定要直到被删节点和它的前一个节点。
由此产生了继续用双指针解题的思想。
这种问题的第一反应当让是 生成一个头节点以便将原来的head当作一般节点处理。
另外需要注意的是在两个指针向链表尾部移动的时候,有节点需要被删除的时候s指针是不需要动的。
*/
func deleteNode(head *ListNode, val int) *ListNode {
t := &ListNode{0, head}
pre, cur := t, t.Next
for cur != nil {
if cur.Val == val {
pre.Next = cur.Next
} else {
pre = pre.Next
}
cur = cur.Next
}
return t.Next
}