Κοινή χρήση τεχνολογίας

Εκμάθηση JAVA - πρακτική χρήση της Java για την εφαρμογή "αφαίρεση συνδεδεμένων στοιχείων λίστας"

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ερώτηση:

Δεδομένου του επικεφαλής κόμβου μιας συνδεδεμένης λίστας και ενός ακέραιου val, διαγράψτε όλους τους κόμβους στη συνδεδεμένη λίστα που ικανοποιούν το Node.val == val και επιστρέψτε τον νέο κόμβο κεφαλής.

Παράδειγμα 1:

Είσοδος: κεφαλή = [1,2,6,3,4,5,6], val = 6
Έξοδος: [1,2,3,4,5]
Παράδειγμα 2:

Είσοδος: head = [], val = 1
Έξοδος: []
Παράδειγμα 3:

Είσοδος: κεφαλή = [7,7,7,7], val = 7
Έξοδος: []
ίχνος:

Ο αριθμός των κόμβων στη λίστα είναι στην περιοχή [0, 104]
1 <= Node.val <= 50
0 <= val <= 50

Απαντήστε σε ιδέες:

Ο παρακάτω είναι κώδικας που χρησιμοποιεί Java για να λύσει το πρόβλημα της κατάργησης στοιχείων από μια συνδεδεμένη λίστα:

  1. class ListNode {
  2. int val;
  3. ListNode next;
  4. ListNode(int val) {
  5. this.val = val;
  6. }
  7. }
  8. public class RemoveLinkedListElements {
  9. public ListNode removeElements(ListNode head, int val) {
  10. // 创建一个虚拟头节点,方便处理头节点可能被删除的情况
  11. ListNode dummy = new ListNode(0);
  12. dummy.next = head;
  13. ListNode curr = dummy;
  14. while (curr.next!= null) {
  15. if (curr.next.val == val) {
  16. curr.next = curr.next.next;
  17. } else {
  18. curr = curr.next;
  19. }
  20. }
  21. return dummy.next;
  22. }
  23. public static void main(String[] args) {
  24. // 构建链表
  25. ListNode head = new ListNode(1);
  26. ListNode node2 = new ListNode(2);
  27. ListNode node3 = new ListNode(6);
  28. ListNode node4 = new ListNode(3);
  29. ListNode node5 = new ListNode(4);
  30. ListNode node6 = new ListNode(5);
  31. ListNode node7 = new ListNode(6);
  32. head.next = node2;
  33. node2.next = node3;
  34. node3.next = node4;
  35. node4.next = node5;
  36. node5.next = node6;
  37. node6.next = node7;
  38. RemoveLinkedListElements solution = new RemoveLinkedListElements();
  39. ListNode newHead = solution.removeElements(head, 6);
  40. // 打印移除指定值后的链表
  41. while (newHead!= null) {
  42. System.out.print(newHead.val + " ");
  43. newHead = newHead.next;
  44. }
  45. }
  46. }

Η ιδέα αυτού του κώδικα είναι: δημιουργία ενός εικονικού κόμβου κεφαλής.ανδρείκελο ', τοποθετήστε τον δείκτη του 'επόμενου' στον κύριο κόμβο 'κεφαλή' της αρχικής συνδεδεμένης λίστας. Στη συνέχεια, διασχίστε τη συνδεδεμένη λίστα μέσω ενός βρόχου και όταν συναντηθεί ένας κόμβος με τιμή ίση με «val», διαγράφεται από τη συνδεδεμένη λίστα. Τέλος, επιστρέφεται ο «επόμενος» κόμβος του «εικονικού», ο οποίος είναι ο κύριος κόμβος της νέας συνδεδεμένης λίστας μετά τη διαγραφή του καθορισμένου κόμβου τιμής.
(Το άρθρο είναι μια περίληψη και αναφορά κάποιων προσωπικών εμπειριών του συγγραφέα στη διαδικασία εκμάθησης Java. Εάν υπάρχουν ακατάλληλα ή λάθος μέρη, παρακαλούμε επικρίνετε και διορθώστε τα. Θα εργαστούμε σκληρά για να τα διορθώσουμε. Εάν υπάρχει παραβίαση , επικοινωνήστε με τον συγγραφέα για να διαγράψετε την ανάρτηση.)