【Question quotidienne】 19. Supprimer le nième nœud de la fin de la liste

Insérez la description de l'image ici

Le titre signifie qu'il n'est autorisé à traverser qu'une seule fois et à supprimer le nième nœud en bas de la liste chaînée. Selon la signification du titre, il doit commencer à compter à partir de 1.

En utilisant la méthode du double pointeur, pour être précis, il n'est pas strictement parcouru une fois, après tout, le deuxième pointeur parcourra une certaine distance.

L'idée de l'algorithme est de configurer deux pointeurs, d'abord laisser le premier pointeur faire n étapes, puis les deux pointeurs aller ensemble, et enfin la position pointée par le deuxième pointeur est le nœud précédent du nœud à supprimer. Il y a une situation particulière à considérer ici, et c'est aussi quelque chose que je n'ai pas remarqué lorsque je l'ai écrit pour la première fois. Si n est égal à la longueur de la liste chaînée, le premier pointeur ira vers le pointeur nul derrière le nœud de queue s'il prend n étapes. , Une erreur sera signalée pendant while (p.next), car le pointeur nul n'a pas d'attribut suivant. Si n est inférieur à la longueur de la liste chaînée, alors nous laissons les deux pointeurs aller ensemble jusqu'à la fin de la liste chaînée

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        p = head
        q = head
        for i in range(0, n):
            p = p.next
        if not p:
            return head.next    #当n等于链表长度的时候,p为空,直接返回head.next
        while(p.next):
            p = p.next
            q = q.next
        q.next = q.next.next
        return head

Je suppose que tu aimes

Origine blog.csdn.net/SJTUKK/article/details/109141830
conseillé
Classement