删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
思路一:添加虚拟结点
/** * Definition for singly-linked list. * public class ListNode { * public var val: Int * public var next: ListNode? * public init(_ val: Int) { * self.val = val * self.next = nil * } * } */ class Solution { func removeElements(_ head: ListNode?, _ val: Int) -> ListNode? { let dummyNode = ListNode.init(-1) dummyNode.next = head var p = dummyNode while p.next != nil { if p.next!.val != val { p = p.next! } else { p.next = p.next?.next } } return dummyNode.next } }
思路二:递归(难以理解)
/** * Definition for singly-linked list. * public class ListNode { * public var val: Int * public var next: ListNode? * public init(_ val: Int) { * self.val = val * self.next = nil * } * } */ class Solution { func removeElements(_ head: ListNode?, _ val: Int) -> ListNode? { guard let head = head else { return nil } head.next = self.removeElements(head.next, val) return head.val == val ? head.next : head } }