Descripción del Título
Dada una lista vinculada, elimine el n-ésimo nodo de la parte inferior de la lista vinculada y devuelva el puntero principal de la lista vinculada.
Por ejemplo,
La lista vinculada dada es: 1-> 2-> 3-> 4-> 5, n = 2.Después de eliminar el n-ésimo nodo de la parte inferior de la lista vinculada, la lista vinculada se convierte en 1-> 2-> 3-> 5.
Observaciones:
La pregunta garantiza que n debe ser válido.
Proporcione un algoritmo con una complejidad de tiempo de \ O (n) O (n)
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
public ListNode removeNthFromEnd (ListNode head, int n) {
// write code here
int len = 0;
ListNode curNode = head;
while(curNode!=null){
len++;
curNode = curNode.next;
}
//如果要删除逆向的n位置 是链表的头节点 直接返回next节点 如:{1,2} n=2 直接返回2
if(len == n){
return head.next;
}
//正向顺序 被删除节点的前一个节点
int targetPos = len - n;
int tmpPos = 0;
ListNode tmpNode = head;
while(tmpNode!=null){
tmpPos++;
//正向顺序 被删除节点的前一个节点
if(tmpPos == targetPos){
tmpNode.next = tmpNode.next.next;
break;
}
tmpNode = tmpNode.next;
}
return head;
}
}