这是链表的第18题,力扣链接。
给你一个链表的头节点
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 输出:[]
看到这道题的第一反应就是遍历一边数组,删除点无用的节点。
func removeElements(head *ListNode, val int) *ListNode {result := &ListNode{Next: head}cur := resultfor cur.Next != nil {if cur.Next.Val == val {cur.Next = cur.Next.Next} else {cur = cur.Next}}return result.Next
}
这个做法是模拟头节点的逻辑,当然,还有别的做法,就是先删头节点再删尾节点。
func removeElements(head *ListNode, val int) *ListNode {for head != nil && head.Val == val {head = head.Next}if head == nil {return head}cur := headfor cur.Next != nil {if cur.Next.Val == val {cur.Next = cur.Next.Next} else {cur = cur.Next}}return head
}
自然,还有一些递归的思维。
func removeElements(head *ListNode, val int) *ListNode {if head == nil {return head}head.Next = removeElements(head.Next, val)if head.Val == val{return head.Next}return head
}