题目
删除链表中等于给定值 val
的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
方案一(迭代)
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeElements(head *ListNode, val int) *ListNode {
dummyHead := &ListNode{}
tail := dummyHead // 新链表当前尾节点
for head != nil {
if head.Val != val {
tail.Next = head
tail = head
} else { // 防止尾节点是需要删除的节点
tail.Next = nil
}
head = head.Next
}
return dummyHead.Next
}
- 由于不能确定 head 节点(及 head.Next)是不是需要去除的节点,所以需要先定义一个 虚假的头结点(返回一个新的链表)
- 最终需要返回的链表的头结点即为
dummyHead.Next
方案二(递归)
func removeElements(head *ListNode, val int) *ListNode {
if head == nil {
return head
}
head.Next = removeElements(head.Next, val)
if head.Val != val {
return head
} else {
return head.Next
}
}
原文
https://leetcode-cn.com/explore/learn/card/linked-list/195/classic-problems/752/