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; } }
学习的博客多用于在笔记中,防止笔记过于臃肿,所以将样例及运行结果放在博客中,后以超链接的形式记录在笔记中,所以有些博文过于单薄。如果有小伙伴遇到问题欢迎评论,看到就会回复,学渣一枚,加油努力。