Description:
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Given linked list – head = [4,5,1,9], which looks like following:
4 -> 5 -> 1 -> 9
Example 1:
Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: You are given the second node with value 5, the linked list
should become 4 -> 1 -> 9 after calling your function.
Example 2:
Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: You are given the third node with value 1, the linked list
should become 4 -> 5 -> 9 after calling your function.
Note:
- The linked list will have at least two elements.
- All of the nodes’ values will be unique.
- The given node will not be the tail and it will always be a valid node of the linked list.
- Do not return anything from your function.
题意:要求在单链表中删除一个节点(这个节点不会是尾节点,并且链表的节点数至少为2);
解法:想到删除链表的节点我们想到的应当是遍历链表,找到那个节点后将前一个节点的指针指向此指定节点的后一个节点,之后删除这个节点;但其实因为节点仅包含了一个节点值和一个后继,我们完全可以将下一个节点的值赋予这个节点,并且此节点的后继等于下一个节点的后继;(但是,这一题其实并没有真的释放那个节点);
Java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}