kousman Δημοσ. 21 Μαΐου 2010 Δημοσ. 21 Μαΐου 2010 μπορει καποιος να μου πει πως μπορω να διαγραψω ενα στοιχειο απο ενα κομβο μια λιστας στην java? θελω δηλαδη να κανω αναζητηση σε ενα στοιχειο να το βρισκει στην λιστα και να το διαγραφει... ενα παραδειγμα θα με βοηθουσε ..thanks
V.I.Smirnov Δημοσ. 21 Μαΐου 2010 Δημοσ. 21 Μαΐου 2010 Ξέρω να το κάνω στη C++ κι' όχι στην Java αν και το σκεπτικό είναι το ίδιο. Έστω b το στοιχείο που ψάχνεις. Βρίσκεις το προηγούμενo του b, έστω a. Θέτεις ως επόμενο του a όχι το b που είναι τώρα αλλά το επόμενο του b, έστω c. Στο παρακάτω απόσπασμα, κάθε κόμβος της λίστας έχει έναν ακέραιο (τον iData) και την αναφορά στον επόμενο κόμβο (next). Kάνει ακρίβώς αυτό που ζητάς : βρίσκει τον κόμβο με τιμή iData ίση με key και μετά τον διαγράφει. >public Link delete(int key) // delete link with given key { Link current = first; Link previous = first; while(current.iData != key) { if (current.next ==null) return null; // cannot find the specified key - return else { previous = current; // go to next link current = current.next; } } // the specified key found if (current == first) // if it is the first link, first = first.next; // change the first else // otherwise previous.next = current.next; // bypass it return current; }
ippo00 Δημοσ. 21 Μαΐου 2010 Δημοσ. 21 Μαΐου 2010 http://java.sun.com/javase/6/docs/api/java/util/List.html#remove(int)
kousman Δημοσ. 22 Μαΐου 2010 Μέλος Δημοσ. 22 Μαΐου 2010 κατανοητο το σκεπτικο αλλα μπορει καποιος να μου δωσει ενα παραδειγμα σε java ? υποψιν δεν μπορω να χρησιμοποιησω ετοιμες κλασεις
V.I.Smirnov Δημοσ. 22 Μαΐου 2010 Δημοσ. 22 Μαΐου 2010 κατανοητο το σκεπτικο αλλα μπορει καποιος να μου δωσει ενα παραδειγμα σε java ? υποψιν δεν μπορω να χρησιμοποιησω ετοιμες κλασεις Το παράδειγμα που σου έδωσα είναι σε java. Και δεν είναι έτοιμη κλάση. Είναι μια κλάση "χειροποίητη" όπου κάθε κόμβος της περιέχει έναν ακέραιο (τον iData) και την αναφορά στον επόμενο κόμβο. Τι πιο απλό ; Και κάνει ακριβώς αυτό που θέλεις. Ολόκληρο το πρόγραμμα δεν μπορώ να το αντιγράψω εδώ. Ας είμαστε λογικοί....
kousman Δημοσ. 23 Μαΐου 2010 Μέλος Δημοσ. 23 Μαΐου 2010 Το παράδειγμα που σου έδωσα είναι σε java. Και δεν είναι έτοιμη κλάση. Είναι μια κλάση "χειροποίητη" όπου κάθε κόμβος της περιέχει έναν ακέραιο (τον iData) και την αναφορά στον επόμενο κόμβο. Τι πιο απλό ; Και κάνει ακριβώς αυτό που θέλεις. Ολόκληρο το πρόγραμμα δεν μπορώ να το αντιγράψω εδώ. Ας είμαστε λογικοί.... thanks φιλε για το χρονο σου
kousman Δημοσ. 24 Μαΐου 2010 Μέλος Δημοσ. 24 Μαΐου 2010 Ξέρω να το κάνω στη C++ κι' όχι στην Java αν και το σκεπτικό είναι το ίδιο. Έστω b το στοιχείο που ψάχνεις. Βρίσκεις το προηγούμενo του b, έστω a. Θέτεις ως επόμενο του a όχι το b που είναι τώρα αλλά το επόμενο του b, έστω c. Στο παρακάτω απόσπασμα, κάθε κόμβος της λίστας έχει έναν ακέραιο (τον iData) και την αναφορά στον επόμενο κόμβο (next). Kάνει ακρίβώς αυτό που ζητάς : βρίσκει τον κόμβο με τιμή iData ίση με key και μετά τον διαγράφει. >public Link delete(int key) // delete link with given key { Link current = first; Link previous = first; while(current.iData != key) { if (current.next ==null) return null; // cannot find the specified key - return else { previous = current; // go to next link current = current.next; } } // the specified key found if (current == first) // if it is the first link, first = first.next; // change the first else // otherwise previous.next = current.next; // bypass it return current; } sorry αλλα μπορεις να μου εξηγησεις λιγο την αρχικοποιηση που κανεις με το first...
V.I.Smirnov Δημοσ. 24 Μαΐου 2010 Δημοσ. 24 Μαΐου 2010 sorry αλλα μπορεις να μου εξηγησεις λιγο την αρχικοποιηση που κανεις με το first... Βέβαια, να σου εξηγήσω. O πρώτος κόμβος μιας λίστας θεωρείται γνωστός και έχει ιδιαίτερο όνομα, συνήθως head. Εδώ λέγεται first. Όταν φτιάχνεις τη λίστα, τον ονομάζεις ξεχωριστά για να μπορείς πάντοτε να τον έχεις άμεσα. Aν δεν τον ξέρεις δεν μπορείς να κάνεις καμιά επεξεργασία με τη λίστα διότι απλώς δεν μπορείς να βρεις από πού θα ξεκινήσεις, δηλ. από πού να την "πιάσεις". Π.χ. στο παραπάνω απόσπασμα o current που δείχνει τον τρέχων κόμβο τι θα είναι αρχικά για να ξεικινήσει το ψάξιμο στο while ; Aναγκαστικά πρέπει να δείχνει τον πρώτο κόμβο της λίστας. Και ο πρώτος "προηγούμενος", previous, το ίδιο. Σκέψου το λίγο και θα το καταλάβεις αμέσως.
V.I.Smirnov Δημοσ. 24 Μαΐου 2010 Δημοσ. 24 Μαΐου 2010 Με ιτερατορ μπορεις και μετα ιτερατορ.remove() Περνούσες απ' έξω, είδες φως και μπήκες... Γράφει σαφέστατα ότι δεν πρέπει να χρησιμοποιηθούν έτοιμες κλάσεις.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.