Καλησπερα!
Μου εχει δοθει ο κωδικας απο μια συναρτηση που υποτιθεται οτι αντιστρεφει μια λιστα.Αυτο που πρεπει να κανω ειναι να βρω τα σφαλματα που εχει ο κωδικας.Σας παραθετω τον κωδικα:
κατ'αρχας,πως πρεπει να γραψω το προγραμμα μου ωστε να το τρεξω,να δωσω 3 νουμερα και να δω τι προβλημα εχει η συναρτηση;Κώδικας:typedef struct node { int value; struct node *next; } *ListNode; int reverse(ListNode *head){ ListNode ln1, ln2, ln3, ln4; if (*head == NULL) return(-1); ln1 = *head; ln2 = (*head)->next; ln3 = NULL; while( ln2 != NULL) { ln4 = ln2->next; ln1->next = ln3; ln3 = ln1; ln1 = ln2; ln2=ln4; } *head = ln1; return(0); }
Εμφάνιση 1-9 από 9
Θέμα: Αντιστροφη λιστας στη C
-
25-03-11, 15:13 Αντιστροφη λιστας στη C #1
-
25-03-11, 18:51 Απάντηση: Αντιστροφη λιστας στη C #2Κώδικας:
int main() { node n1,n2,n3,n4; n1.value = 1; n1.next =&n2; n2.value = 2; n2.next = &n3; n3.value = 3; n3.next = &n4; n4.next = NULL; n4.value =4; ListNode test = &n1;//set while(test)//print { printf("%d",test->value); test = test->next; } test = &n1;//reset reverse(&test);//test while(test)//print { printf("%d",test->value); test = test->next; } return 0; }
-
25-03-11, 21:43 Απάντηση: Αντιστροφη λιστας στη C #3
Σορυ για την ασχετοσυνη μου, αλλα αυτο που μου εχεις γραψει πώς θα το εισαγω στο δικο μου παραδειγμα;Προσπαθησα με καποιες τροποποιησεις να το γραψω,αλλα μου βγαζει ενα σωρο λαθη...
-
26-03-11, 17:10 Απάντηση: Αντιστροφη λιστας στη C #4
Σε ένα άδειο αρχείο C, γράφεις τον κώδικα σου και μετά απο κάτω (στο ίδιο αρχείο) την main.
Βάλε και κανένα #include <stdio.h> και είσαι έτοιμος να ψάξεις.
-
27-03-11, 17:21 Απάντηση: Αντιστροφη λιστας στη C #5Κώδικας:
#include <stdio.h> #include <stdlib.h> typedef struct node { int value; struct node *next; } *ListNode; void insert(ListNode *, int);/*ÓõíÜñôçóç åéóáãùãÞò êüìâïõ óôç ëßóôá*/ void printList(ListNode ); int reverse(ListNode *); int main(){ ListNode HEAD=NULL;//original list insert(&HEAD,1); insert(&HEAD,2); insert(&HEAD,3); insert(&HEAD,4); insert(&HEAD,5); printf("\ni lista prin to reverse:\n"); printList(HEAD); printf("\ni lista meta to reverse\n"); reverse(&HEAD); printList(HEAD); getchar(); return 0; } void insert( ListNode *Head, int value){ ListNode current=*Head,previous=NULL,new1=NULL; new1 = (ListNode) malloc( sizeof( struct node ) ); new1->value=value; new1->next=NULL; if (current==NULL){ *Head=new1; }else{ while(current!=NULL){ previous=current; current=current->next; } if (current==NULL) previous->next=new1; } } void printList(ListNode Head){ printf("\n i lista einai:\n"); ListNode x=Head; while(x!=NULL){ printf("%d -->",x->value); x=x->next; } printf("NULL\n"); } int reverse(ListNode *head){ ListNode ln1, ln2, ln3, ln4; if (*head == NULL) return(-1); ln1 = *head; ln2 = (*head)->next; ln3 = NULL; while( ln2 != NULL) { ln4 = ln2->next; ln1->next = ln3; ln3 = ln1; ln1 = ln2; ln2=ln4; } *head = ln1; return(0); }
-
27-03-11, 20:11 Απάντηση: Αντιστροφη λιστας στη C #6
Σ'ευχαριστω παρα παρα πολυ!
-
28-03-11, 20:10 Απάντηση: Αντιστροφη λιστας στη C #7
Απ' ό'τι βλεπω, η συνάρτηση που μου έχει δοθεί, αντι να αντιστρέφει μια λίστα,απλά δείχνει το τελευταίο της στοιχείο. Αυτό συμβαίνει επειδή δε γίνεται σύνδεση μεταξύ των κόμβων όταν επιχειρείται η αντιστροφή ή επειδή οι κόμβοι μετά δείχνουν μόνο στο τελευταίο στοιχείο;
-
28-03-11, 20:23 Απάντηση: Αντιστροφη λιστας στη C #8
Το next του tail σου στην αρχή είναι null. Όταν γυρίσει η λίστα, θα πρέπει να δείχνει το δεύτερο στοιχείο.
Βάλε αυτό στο τέλος και θα δουλέψει.
Κώδικας:ln1.next = ln3;
Τελευταία επεξεργασία από το μέλος pan05 : 28-03-11 στις 20:26. Αιτία: Added code tags
-
28-03-11, 20:43 Απάντηση: Αντιστροφη λιστας στη C #9
Χιλια ευχαριστω!
Παρόμοια Θέματα
-
GreekPhones.info - Αντίστροφη αναζήτηση τηλεφώνων
Από yannisc στο φόρουμ Web authoring, development & web designΜηνύματα: 66Τελευταίο Μήνυμα: 15-11-11, 17:08 -
Διαβασμα απο αρχειο txt και γεμισμα λιστας στη C
Από ambageo στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 4Τελευταίο Μήνυμα: 14-03-11, 00:51 -
Αντιστροφη του κεφαλικου αριθμου με το msn
Από geopro64 στο φόρουμ Isdn - PstnΜηνύματα: 13Τελευταίο Μήνυμα: 12-02-10, 14:41 -
H αντίστροφη μέτρηση για το Burning Crusade αρχίζει
Από Reef στο φόρουμ Games και Online GamingΜηνύματα: 1Τελευταίο Μήνυμα: 16-01-07, 14:05 -
Hellas Sat : Η αντίστροφη μέτρηση άρχισε!!!!!!!!!!!
Από jimsliakas στο φόρουμ SatelliteΜηνύματα: 12Τελευταίο Μήνυμα: 14-05-03, 09:43
Bookmarks