notas título escova LeetCode -19 lista contagem regressiva Excluir de N nós

Título:
Dada uma lista, delete lista recíproco de n nós, e retorna à lista nó principal.
exemplo:

Dada uma lista de: 1-> 2> 3-> 4-> 5, e n = 2.
Depois de removido quando o nó penúltimo, a lista torna-se 1-> 2-> 3-> 5.

Descrição: para garantir que um determinado n é válido.
Avançado: Use uma passagem percebeu
: Interpretações
a primeira travessia do comprimento da lista novamente para obter a lista, elimine o penúltimo n nós é excluído positivos primeiros LEN-n + 1 nós, delete:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        int len=0;
        ListNode temp=new ListNode();
        temp=head;
        while(temp!=null){
            temp=temp.next;
            len++;
        }
        temp=head;
        if(len==n) return head.next;//如果删除的是首元素则直接返回第二元素
        for(int i=0;i<len-n-1;i++){
            temp=temp.next;
        }
        temp.next=temp.next.next;
        return head;
    }
}

Ou podemos usar um método de dupla ponteiro travessia para encontrar o elemento que você deseja excluir. O primeiro ponteiro é movido para a frente a partir do início da lista de passo n + 1, e o início da segunda lista a partir do ponteiro de início. Agora, estes dois ponteiros estão separados por n nós. Deixe o intervalo constante mantida movendo simultaneamente ambas as mãos para a frente, até que o primeiro ponteiro atingir o último nó. Neste momento, o segundo ponteiro aponta para o nó de ordem n a partir do último ponto de junção. Nós re-ligação para o segundo nó referenciado pelo ponteiro para o próximo ponteiro para o próximo nó nesse nó.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        int len=0;
        ListNode temp1=new ListNode(0);
        ListNode temp2=new ListNode(0);
        temp1=head;
        temp2=head;
        while(len!=n){
            temp1=temp1.next;
            len++;
        }
        if(temp1==null) return head.next;
        while(temp1.next!=null){
            temp1=temp1.next;
            temp2=temp2.next;
        }
        temp2.next=temp2.next.next;
        return head;
    }
}

Na verdade, a fim de reduzir circunstâncias interferência especiais (como apenas um nó, o primeiro nó a ser excluído), podemos usar um manequim como o próximo nó é a ajuda nó principal, nós mudos, veja as idéias específicas oficiais Solução:
Portal

Publicado 10 artigos originais · ganhou elogios 3 · Vistas 2260

Acho que você gosta

Origin blog.csdn.net/qq_40397223/article/details/104896437
Recomendado
Clasificación