力扣算法 - 移除链表元素

212 阅读1分钟

移除链表元素

删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5

思路:
定义一个虚拟头结点, newNode = ListNode(0) 从头部往尾部循环, 取 newNode.next.val == 给定的val 
例如 A-> B-> C-> D  要删除 C ( B.next ) 只需要 A-> B -> D
B .next = D   即 是  B.next = B.next.next
Java实现
    public ListNode removeElements(ListNode head, int val) {
        if (head == null) return null;
        ListNode newNode = new ListNode(0);
        newNode.next = head;

        ListNode node = newNode;
        while (newNode.next != null) {
            if (newNode.next.val == val) {
                newNode.next = newNode.next.next;
            } else {
                newNode = newNode.next;
            }
        }
        return node.next;
    }
Swift实现
    func removeElements(_ head: ListNode?, _ val: Int) -> ListNode? {
        if head == nil {
            return nil
        }
        var newHead = ListNode(0)
        newHead.next = head
        let node = newHead
        
        while newHead.next != nil {
            if newHead.next?.val == val {
                newHead.next = newHead.next?.next
            } else {
                newHead = newHead.next!
            }
        }
        
        return node.next
        
    }
    
     public class ListNode {
        public var val: Int
        public var next: ListNode?
        public init(_ val: Int) {
            self.val = val
            self.next = nil
        }
    }