Escriba una función para eliminar un nodo determinado (no final) en una lista vinculada. El único parámetro que se pasa a la función es el nodo que se va a eliminar.
Hay una lista vinculada - head = [4,5,1,9], que se puede expresar como:
Ejemplo 1:
Entrada: cabeza = [4,5,1,9], nodo = 5
Salida: [4,1,9]
Explicación: Dado el segundo nodo cuyo valor es 5 en su lista vinculada, luego de llamar a su función, la lista vinculada debe ser 4 -> 1 -> 9.
Ejemplo 2:
Entrada: cabeza = [4,5,1,9], nodo = 1
Salida: [4,5,9]
Explicación: Dado el tercer nodo cuyo valor es 1 en su lista vinculada, luego de llamar a su función, la lista vinculada debe ser 4 -> 5 -> 9.
rápido:
La lista vinculada contiene al menos dos nodos.
Los valores de todos los nodos de la lista vinculada son únicos.
El nodo dado no es el nodo final y debe ser un nodo válido en la lista vinculada.
No devuelva ningún resultado de su función.
Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/delete-node-in-a-linked-list Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Idea: Al comienzo de esta pregunta, mi idea era buscar el anterior porque el valor es el único, y luego borrar el especificado. Como resultado, busqué por un tiempo y encontré que la cabeza no entraba . Me quedé atónito por un tiempo, así que fui a buscar. La solución del problema, como resultado, hay una solución de problema enigmático. De hecho, es una idea nueva, y la complejidad del tiempo también es baja. La única desventaja es no es una desventaja que no pueda ser el nodo de cola.
/**
* 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;
}
}