LeetCode移除链表元素Swift

删除链表中等于给定值 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
    }
}
原文地址:https://www.cnblogs.com/huangzs/p/14201113.html