203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
提示:
- 列表中的节点数目在范围 [0, 10^4] 内
- 1 <= Node.val <= 50
- 0 <= val <= 50
Go代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeElements(head *ListNode, val int) *ListNode {
// 思路:单链表原则:增删都是找目标节点的前一个节点,改查则找到目标节点即可
// 要删除的节点可能是头节点,而删除操作我们要找目标节点的前一个节点,头结点没有前一个节点了怎么办,定义虚拟头结点解决
if head == nil {
return head
}
dummyHead := &ListNode{}
dummyHead.Next = head
cur := dummyHead // cur 就是目标节点的前一个节点
for cur.Next!= nil {
if cur.Next.Val == val { // 相等则删除
cur.Next = cur.Next.Next
} else { // 不相等则后移
cur = cur.Next
}
}
return dummyHead.Next
}

1000

被折叠的 条评论
为什么被折叠?



