当前位置:网站首页>Supprimer l'avant - dernier noeud de la liste liée

Supprimer l'avant - dernier noeud de la liste liée

2021-09-15 04:37:49 Xiaoyu23363

Voici une liste de liens,Supprimer l'avant - dernier de la liste n Noeuds,Et renvoie le noeud d'en - tête de la liste liée.

Niveau avancé:Pouvez - vous essayer une implémentation de scan?

Exemple 1:

 

 


Entrée:head = [1,2,3,4,5], n = 2
Produits:[1,2,3,5]
Exemple 2:

Entrée:head = [1], n = 1
Produits:[]
Exemple 3:

Entrée:head = [1,2], n = 1
Produits:[1]

 

Comment résoudre le problème:

Ce sujet utilise deux pointeurs pour réaliser une traversée latérale pour obtenir des résultats.Tout d'abord,newUnfastNoeud,Et mettreheadAvecfastLes noeuds sont stockés,En tant que noeud d'en - tête de la liste(Réglage du noeud de tête,C'est pour éviter que la liste n'ait qu'un seul élément,Un seul mot ne sera pas supprimé),Et puisnewUnslowNoeud,Préparez - vous à traverser à partir de zéro.

D'abord.fastTraversée du pointeurnUne fois,Et puisfastJusqu'à l'en - tête,slowAvecfastTraversée synchrone,QuandfastTraverser la fin du tableau,slowJuste à côté de la queue de la montren,Juste à l'avant - derniernDivision.

Attention aux conditions de jugement cyclique,Juge d'abordfast.nextEst vide,Ne pas laisser vide et continuer à traverser.

public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode fast =  new ListNode(0);
        fast.next = head;
        head = fast;
        ListNode slow = fast;
        int i = 0;
        while(true){
            if(i < n) {
                fast = fast.next;
                i++;
            }
            else{
                if(fast.next == null){
                    slow.next = slow.next.next;
                    break;
                }
                else {
                    slow = slow.next;
                    fast = fast.next;
                }

            }
        }
        return head.next;

    }

 

版权声明
本文为[Xiaoyu23363]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/09/20210914174919359p.html

随机推荐