Προς το περιεχόμενο

διαγραφη στοιχειου απο λιστα στην java


kousman

Προτεινόμενες αναρτήσεις

Δημοσ.

μπορει καποιος να μου πει πως μπορω να διαγραψω ενα στοιχειο απο ενα κομβο μια λιστας στην java?

θελω δηλαδη να κανω αναζητηση σε ενα στοιχειο να το βρισκει στην λιστα και να το διαγραφει...

 

ενα παραδειγμα θα με βοηθουσε ..thanks

Δημοσ.

Ξέρω να το κάνω στη 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;

}

Δημοσ.

κατανοητο το σκεπτικο αλλα μπορει καποιος να μου δωσει ενα παραδειγμα σε java ? υποψιν δεν μπορω να χρησιμοποιησω ετοιμες κλασεις

Δημοσ.
κατανοητο το σκεπτικο αλλα μπορει καποιος να μου δωσει ενα παραδειγμα σε java ? υποψιν δεν μπορω να χρησιμοποιησω ετοιμες κλασεις

 

Το παράδειγμα που σου έδωσα είναι σε java. Και δεν είναι έτοιμη κλάση.

 

Είναι μια κλάση "χειροποίητη" όπου κάθε κόμβος της περιέχει έναν ακέραιο (τον iData) και την αναφορά στον επόμενο κόμβο. Τι πιο απλό ;

Και κάνει ακριβώς αυτό που θέλεις.

Ολόκληρο το πρόγραμμα δεν μπορώ να το αντιγράψω εδώ. Ας είμαστε λογικοί....

Δημοσ.
Το παράδειγμα που σου έδωσα είναι σε java. Και δεν είναι έτοιμη κλάση.

 

Είναι μια κλάση "χειροποίητη" όπου κάθε κόμβος της περιέχει έναν ακέραιο (τον iData) και την αναφορά στον επόμενο κόμβο. Τι πιο απλό ;

Και κάνει ακριβώς αυτό που θέλεις.

Ολόκληρο το πρόγραμμα δεν μπορώ να το αντιγράψω εδώ. Ας είμαστε λογικοί....

 

thanks φιλε για το χρονο σου

Δημοσ.
Ξέρω να το κάνω στη 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...

Δημοσ.
sorry αλλα μπορεις να μου εξηγησεις λιγο την αρχικοποιηση που κανεις με το first...

 

 

Βέβαια, να σου εξηγήσω.

O πρώτος κόμβος μιας λίστας θεωρείται γνωστός και έχει ιδιαίτερο όνομα, συνήθως head. Εδώ λέγεται first.

Όταν φτιάχνεις τη λίστα, τον ονομάζεις ξεχωριστά για να μπορείς πάντοτε να τον έχεις άμεσα.

Aν δεν τον ξέρεις δεν μπορείς να κάνεις καμιά επεξεργασία με τη λίστα διότι απλώς δεν μπορείς να βρεις από πού θα ξεκινήσεις, δηλ. από πού να την "πιάσεις".

Π.χ. στο παραπάνω απόσπασμα o current που δείχνει τον τρέχων κόμβο τι θα είναι αρχικά για να ξεικινήσει το ψάξιμο στο while ;

Aναγκαστικά πρέπει να δείχνει τον πρώτο κόμβο της λίστας. Και ο πρώτος "προηγούμενος", previous, το ίδιο. Σκέψου το λίγο και θα το καταλάβεις αμέσως.

Δημοσ.
Με ιτερατορ μπορεις και μετα ιτερατορ.remove()

 

Περνούσες απ' έξω, είδες φως και μπήκες...

Γράφει σαφέστατα ότι δεν πρέπει να χρησιμοποιηθούν έτοιμες κλάσεις.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...