2010-05-02 5 views
3

J'ai une liste chaînée d'entiers. Quand j'insère un nouveau nœud, je dois l'insérer non pas à la fin, mais dans ou ... c'est-à-dire 2, 4, 5, 8, 11, 12, 33, 55, 58, 102, etc. Je ne pense pas Je l'insère dans la bonne position. Vois-tu ce que je fais de mal?Liste liée. Insérer des entiers dans l'ordre

Node newNode = new Node(someInt); 
Node current = head; 

     for(int i=0; i<count; i++){ 
      if(current == tail && tail.data < someInt){ 
       tail.next = newNode; 
      } 
      if(current.data < someInt && current.next.data >= someInt){ 
       newNode.next = current.next; 
       current.next = newNode; 
      } 
     } 
+1

À moins que vous vouliez récupérer par index ou doublons, je vous suggère d'utiliser un 'SortedSet ' et 'Node implémente Comparable ' à la place. – BalusC

+0

@BalusC: Je suis à peu près sûr qu'il s'agit d'une tâche X HW en écriture personnalisée, basée sur l'historique des questions user69514 et la question elle-même. Ce que je soupçonne signifie que de vraies réponses sont manquantes, bien que SortedSet suffirait probablement, puisqu'il semble que toutes les données que contient Node. – Carl

Répondre

4

Je pense que cela pourrait être plus proche de ce que vous recherchez.

Node newNode = new Node(someInt); 
Node current = head; 
//check head first 
if (current.data > newNode.data) { 
    newNode.next = head; 
    head = newNode; 
} 

//check body 
else { 
    while(true){ 
    if(current == tail){ 
     current.next = newNode; 
     tail = newNode; 
     break; 
    } 
    if(current.data < someInt && current.next.data >= someInt){ 
     newNode.next = current.next; 
     current.next = newNode; 
     break; 
    } 
    current = current.next; 
    } 
} 
+0

ce look mieux, mais il va dans une boucle infinie – user69514

+0

whoops, a oublié de mettre à jour la référence actuelle à la fin de la boucle –

2

Vous n'allez jamais de l'avant dans la liste. vous avez besoin d'un autre qui définit:

current = current.next 

Vous pouvez également ajouter une instruction break après avoir inséré le noeud depuis à ce moment-là que vous avez terminé avec la boucle.

1

Il ne ressemble pas à vous current la mise à jour ... essayez d'insérer quelque chose comme ça dans votre boucle:

current = current.next; 
0

On dirait que vous avez manqué le cas, lorsque le nouvel élément est inférieur à tous les existants.