2017-10-04 6 views
-5
#include <iostream> 
#include <stdlib.h> 
#include <stdio.h> 
int main(int argc, char const *argv[]) { 
    struct sam{ 
    int data; 
    struct sam *next; 
    }; 
    struct sam node[11]; 
    for(int i=0;i<10;i++){ 
    node[i].data = i/2; 
    node[i].next = &node[i+1]; 
} 
node[10].next=NULL; 
for (size_t i = 0;node[i].next!=NULL; i++) { 
std::cout <<node[i].data<< '\t'; 
} 
std::cout << '\n'; 
for(int i=0;node[i].next->next!=NULL;i++){ 
    if(node[i].data == node[i].next->data){ 
    node[i].next = node[i].next->next; 
} 
} 

for (size_t i = 0;node[i].next!=NULL; i++) { 
std::cout << "Data is " <<node[i].data<< '\t'; 
} 
return 0; 
} 

L'objectif est de supprimer les doublons d'une liste triée liée et j'ai attribué au hasard 0,0,1,1,2,2,3,3,4,4 à la liste Le noeud de ligne [ i] = .next noeud [i] .next-> suivant nDexécute pas et, désormais, je ne reçois pas sortie désirée ...Pourquoi ce programme ne fonctionne pas et je pense que l'erreur est dans l'affectation de liste liée?

+0

** C ** Ne pas même avoir 'std :: cout' - c'est C++ là. Aussi: [débogage] (http://idownvotedbecau.se/nodebugging/). –

+0

Je recommande d'indenter votre code correctement, beaucoup d'une erreur a été trouvée en appliquant un codage codant un style utile. – Yunnosch

+2

Vous n'utilisez pas à côté de parcourir la liste. Vous itérez toujours sur le tableau sous-jacent - et il ne change jamais –

Répondre

1

tableau de nœud d'origine

 +-------------------------------------------------+ 
data | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | Garbage | 
    +-------------------------------------------------+ 
Next 1 2 3 4 5 6 7 8 9 10 NULL 

Après avoir réglé la prochaine

 +-------------------------------------------------+ 
data | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | Garbage | 
    +-------------------------------------------------+ 
Next 2 2 4 4 6 6 8 8 10 10 NULL 

Donc, si vous passez du nœud principal au suivant en utilisant le pointeur suivant - vous verrez la liste filtrée

Mais puisque vous allez utiliser l'approche indexée originale - vous voyez toujours tous les nœuds.

je l'ai montré à côté comme Index juste pour illustration au lieu des valeurs réelles de pointeur - Alors, où vous voyez == Next 2 - cela signifie que le pointeur passe au noeud de membre du groupe [2]