LeetCode237.删除链表中的节点

题目描述:

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。

正常思路下,要删除一个节点,首先找到他的前一个节点,让前一个节点(pre)的next 指向 pre.next.next,但对于该题中函数只给定了一个参数,也就是要删除的节点,于是这道题就变的有意思了。

 

一句话概括:将要删除节点的下一个节点的值,复制给要删除节点,然后将下一个节点删除。

 

比如:1->2->3->4,要删除值为2的节点,那么就将值为3的节点复制给值2为2的节点,也就变成1->3->3->4,然后将第二个值为3的节点删除。也就是1->3->4,同样符合题目要求。

 

虽然这么做的确达到了删除的效果,但其实真正要被删除的节点并没有删除,而是披着它下一个节点的衣服继续活着。

 

继续深究这道题,由于Java是值传递,真正意义上的删除应该是直接在内存上其地址删除,但这道题中的删除并没有删除一个节点的地址,而只是将它其中的val属性删除了。

class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

 

posted @ 2020-09-30 21:12  硬盘红了  阅读(110)  评论(0编辑  收藏  举报