6
votes

Comment copiez-vous une liste liée dans une autre liste?

J'étudie des structures de données et des listes liées, mais je ne comprends pas comment effectuer une copie d'une liste liée. Quelqu'un peut-il expliquer cela, éventuellement utiliser pseudocode ou code C?


0 commentaires

3 Réponses :


5
votes

Comprenez-vous comment ajouter un nouveau noeud à une liste existante? Et comprenez-vous comment traverser (c'est-à-dire itérair) une liste? Copier une liste vient d'effectuer simultanément ces deux opérations (Traverse Lista; pour chaque élément, copiez l'élément et ajoutez-le sous la forme d'un nouveau nœud à la liste).


0 commentaires

29
votes

La logique pour la duplication d'une liste liée est récursive et basée sur les observations suivantes:

  1. Le clone de la liste vide est la liste vide.
  2. Le clone d'une liste avec le premier nœud X et les nœuds restants XS est une copie de x achète sur un clone de XS.

    Si vous encodez la liste liée en C ++, cela peut être très propre: xxx


0 commentaires

0
votes

La réponse à ce post a été donnée et acceptée - tout bon! Toutefois, si quelqu'un recherche une approche itérative dans c # forte>, voici:

la classe de nœud: strong> p> xxx pré>

Voici la mise en œuvre itérative: p> xxx pré>

complexité de temps: o (n) strong> p>

complexité spatiale: O (n) strong> p>

où n = nombre de nœuds dans la liste liée. P>

Sa préférence personnelle à utiliser une approche récursive ou itérative, mais je suggérerais de penser à penser À propos de la pile d'appels de fonction lors de l'utilisation de récursif. P>

Test de l'unité: strong> p>

[Test]
public void CopyLinkedListIterativelyTest()
{
    Node head = new Node(1);
    head.Next = new Node(2);
    head.Next.Next = new Node(3);
    head.Next.Next.Next = new Node(4);
    head.Next.Next.Next.Next = new Node(5);

    var actual = runner.CopyLinkedListIteratively(head);

    while (actual != null)
    {
        Assert.AreEqual(head.Val, actual.Val);
        actual = actual.Next;
        head = head.Next;
    }
}


0 commentaires