题目:
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Supposed the linked list is
1 -> 2 -> 3 -> 4
and you are given the third node with value3
, the linked list should become1 -> 2 -> 4
after calling your function.
分析:
删除链表中的指定节点。
这道题目很有意思。没有给出链表的头结点,因此也就无法知道要删除节点的前一个节点。这怎么能行呢?乍一看是个不可能完成的任务。其实不然。我们在做链表操作的时候往往有一种思维定式,光想着修改next,却想不到还可以修改val。直接把下一个节点的值复制到当前节点,然后再按照一般方法删除下一个节点即可。
另外注意一下,使用C或者C++等语言时,要防止内存泄露。
代码:
Java
1 2 3 4 5 6 |
public class Solution { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next; } } |