Titre description
Compte tenu de la liste, la liste de suppression réciproque des nœuds n, et retourne à la liste des nœuds de tête.
pensée
- Tout d'abord parcourir la liste longueur d'enregistrement, avant Réitérons pour supprimer une position, peu de suppression de saut. Cette méthode nécessite de traverser deux fois
- Traversant à double aiguille, un pointeur vers le point de départ A, lorsque le pointeur de n + 1 étape A produit, point de pointeur de B au point de départ du début, lorsqu'elle atteint l'extrémité A, B se trouve être un point avant le noeud de suppression
code
Première méthode:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(head == NULL)
return NULL;
ListNode* cur = head;
int count = 0;
while(cur!= NULL)
{
count++;
cur = cur->next;
}
if(n == count)
return head->next;
if(n == 0)
return head;
cur = head;
int i = 0;
while(i < count-n-1)
{
cur = cur->next;
i++;
}
if(cur->next->next)
{
cur->next = cur->next->next;
}
else
{
cur ->next = NULL;
}
return head;
}
};
Méthode Deux:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(NULL);
dummy->next = head; //添加头节点,便于操作
ListNode* slow=dummy,* fast=dummy;
int distance=0;
while(fast->next){
if(distance<n){
fast=fast->next;
distance++;
}else{
fast=fast->next;
slow=slow->next;
}
}
slow->next=slow->next->next;
return dummy->next;
}
};