Maison >développement back-end >Golang >Erreur d'exécution : adresse mémoire invalide ou pointeur nul déréférencé via un cycle

Erreur d'exécution : adresse mémoire invalide ou pointeur nul déréférencé via un cycle

WBOY
WBOYavant
2024-02-06 11:33:09544parcourir

运行时错误:无效的内存地址或 nil 指针通过循环取消引用

Contenu de la question

J'essaie de résoudre ce problème : https://leetcode.com/problems/reverse-linked-list/description/?envtype=study-plan&id=level-1

Entrée : tête = [1,2,3,4,5]

Voici mon code :

func reverseList(head *ListNode) *ListNode {
    var prev *ListNode
    prev = nil
    for head.Next != nil {
        head, head.Next, prev = head.Next, prev, head
    }
    if head.Next == nil {
        head.Next = prev
    }
    return head
}

Après l'exécution, le programme a signalé une erreur : panique : erreur d'exécution : adresse mémoire invalide ou déréférencement de pointeur nul. Veuillez m'expliquer pourquoi cette erreur se produit

Entrée : tête = [1,2,3,4,5]. Je veux boucler 4 fois jusqu'à ce que head.next == nil. Mais quelque chose d’inattendu s’est produit.


Réponse correcte


Si head est nul -> head.next donnera une erreur comme celle que vous avez donnée

func reverselist(head *listnode) *listnode {
    var prev *listnode
    prev = nil
    for head != nil && head.next != nil {
        head, head.next, prev = head.next, prev, head
    }
    if  head != nil && head.next == nil {
        head.next = prev
    }
    return head
}

Encore plus simple, c'est :

func reverseList(head *ListNode) *ListNode {
    var prev *ListNode
    prev = nil
    for head != nil {
        head, head.Next, prev = head.Next, prev, head
    }
    if head == nil {
        head = prev
    }
    return head
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer