décrire
Étant donné le nœud principal pHead d'une liste liée individuellement (le nœud principal a une valeur, par exemple, dans la figure ci-dessous, sa valeur est 1), la longueur est n, après avoir inversé la liste liée, renvoie la tête de la nouvelle liste liée liste.
Plage de données : 0\leq n\leq10000≤n≤1000
Exigences : complexité spatiale O(1)O(1) , complexité temporelle O(n)O(n) .
Par exemple, lors de la saisie de la liste chaînée {1,2,3},
Après inversion, la liste chaînée d'origine devient {3,2,1}, donc la sortie correspondante est {3,2,1}.
Le processus de conversion ci-dessus est illustré dans la figure ci-dessous :
Exemple 1
entrer:
{1,2,3}
valeur de retour :
{3,2,1}
Exemple 2
entrer:
{}
valeur de retour :
{}
illustrer:
Sorties de liste chaînée vides vides
Code
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function ReverseList(pHead)
{
// write code here
let p1=null;
let p2=null;
while(pHead) {
p1=pHead.next;
pHead.next=p2;
p2=pHead;
pHead=p1;
}
return p2;
}
module.exports = {
ReverseList : ReverseList
};
Explication, en fait, la fonction du pointeur p1 est utilisée pour enregistrer la liste chaînée d'origine, et la fonction de p2 est utilisée pour stocker temporairement le résultat, p1=pHead.next; et pHead=p1; sont en fait utilisés pour déplacer le pointeur , le noyau est pHead.next =p2;p2=pHead ces deux lignes de code. Processus de mise en œuvre:
// 第1层循环:
// p1: 2 -> 3 ->null
p1 = pHead.next
//* pHead: 1 -> null
pHead.next = p2
//* p2: 1 -> null
p2 = pHead
// pHead: 2 -> 3 ->null
pHead = p1
// 第2层循环:
// p1: 3 ->null
p1 = pHead.next
//* pHead: 2 -> 1 -> null
pHead.next = p2
//* p2: 2 -> 1 -> null
p2 = pHead
// pHead: 3 ->null
pHead = p1
// 第3层循环:
// p1: null
p1 = pHead.next
//* pHead: 3 -> 2 - >1 -> null
pHead.next = p2
//* p2: 3 -> 2 -> 1 -> null
p2 = pHead
// pHead: null
pHead = p1