237. Delete Node in a Linked List

题目描述和难度

  • 题目描述:

请编写一个函数,使其可以删除某个链表中给定的(非末尾的)节点,您将只被给予要求被删除的节点。

比如:假设该链表为 1 -> 2 -> 3 -> 4  ,给定您的为该链表中值为 3 的第三个节点,那么在调用了您的函数之后,该链表则应变成 1 -> 2 -> 4 。

思路分析

求解关键:把下一个结点的值复制给当前节点,然后再把指针指向下一结点的下一结点。弄清楚题意,题目只给你这个节点的引用,让你从链表中删除这个节点,所以不要和 dummyNode 那种套路混在一起了。

参考解答

参考解答1


class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }

    ListNode(Integer[] nums) {
        ListNode currNode = this;
        currNode.val = nums[0];
        for (int i = 1; i < nums.length; i++) {
            currNode.next = new ListNode(nums[i]);
            currNode = currNode.next;
        }
    }

    @Override
    public String toString() {
        ListNode currNode = this;
        StringBuilder s = new StringBuilder();
        while (currNode != null) {
            s.append(currNode.val);
            s.append(" -> ");
            currNode = currNode.next;
        }
        s.append("NULL");
        return s.toString();
    }
}

public class Solution {

    public void deleteNode(ListNode node) {
        // 因为题目已经明确说了,不是最后一个节点,因此 node.next 一定非空
        ListNode next = node.next;
        node.next = next.next;
        node.val = next.val;
        next.next = null;
    }

    public static void main(String[] args) {
        ListNode node1 = new ListNode(0);
        ListNode node2 = new ListNode(1);
        node1.next = node2;
        Solution s = new Solution();
        s.deleteNode(node1);
    }
}

本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0237-delete-node-in-a-linked-list ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com