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 value 3
, the linked list should become 1 -> 2 -> 4
after calling your function.
题目的意思是实现算法完成给定一个单链表和要删除的节点(尾节点除外)的功能。
这个题目巧就巧在基于单链表的基础上,当已知给定想要删除的节点时,可以先把给定节点的next的值赋给给定的要删除的节点,然后要删除节点的next指向要给定节点的next的next,这样就可以直接把给定节点的next节点进行删除。
总之巧妙在只给一个要删除的节点,可以把要删除的节点转化为其next节点。避免了从链表的头节点进行找要删除节点的前驱节点(有些时候其前驱节点并不好找)
现附代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public void deleteNode(ListNode node) {
if(node == null)
return;
node.val = node.next.val;
node.next = node.next.next;
}
}