237. Delete Node in a Linked List 「删除链表中的节点」

2019年11月14日 43点热度 0人点赞 0条评论

编写一个函数以删除单链表中的节点(除了尾部节点),且只给出要删除的节点。

给定一个链表 head = [4,5,1,9],如下图所示:

例一:
输入: head = [4,5,1,9], node = 5
输出: [4,1,9]
解释: 你拿到了值为 5 的第二个节点,在执行你的函数之后链表应当变为 4 -> 1 -> 9。

例二:
输入: head = [4,5,1,9], node = 1
输出: [4,5,9]
解释: 你拿到了值为 1 的第三个节点,在执行你的函数之后链表应当变为 4 -> 5 -> 9。

提示:
1. 链表至少有两个元素。
2. 每个节点的值各不相同。
3. 给定的节点不会是尾部节点而且是链表中有效的节点。
4. 你的函数不要返回任何值。

这个题很简单,要求删除给定的节点。但是却不给你之前的节点,这样的话我们就没有办法在不修改节点值的情况下完成,也就是说我们必须需要修改某个节点的值。

由于给定的条件中说了给的节点不会是最后一个,所以我们连检查也不需要了。

/*
 * 237. Delete Node in a Linked List
 * https://leetcode.com/problems/delete-node-in-a-linked-list/
 * https://realneo.me/237-delete-node-in-a-linked-list/
 */

public class DeleteNode {
    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        ListNode node = head;
        for (int i = 2; i < 10; i++) {
            node.next = new ListNode(i);
            node = node.next;
        }

        DeleteNode solution = new DeleteNode();

        solution.print(head);
        solution.deleteNode(head.next.next);
        solution.print(head);
    }

    private void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }

    private void print(ListNode node) {
        for (; node != null; node = node.next) {
            System.out.print(node.val);
            System.out.print("->");
        }
        System.out.println("null");
    }
}

Neo

与卿再世相逢日,玉树临风一少年。

文章评论