Condivisione della tecnologia

Apprendimento JAVA: esercitarsi nell'uso di Java per implementare la "rimozione degli elementi dell'elenco collegato"

2024-07-12

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

domanda:

Dato il nodo head head di una lista collegata e un valore intero, eliminare tutti i nodi nella lista collegata che soddisfano Node.val == val e restituire il nuovo nodo head.

Esempio 1:

Ingresso: testa = [1,2,6,3,4,5,6], val = 6
Uscita: [1,2,3,4,5]
Esempio 2:

Ingresso: testa = [], val = 1
Produzione: []
Esempio 3:

Ingresso: testa = [7,7,7,7], val = 7
Produzione: []
suggerimento:

Il numero di nodi nell'elenco è compreso nell'intervallo [0, 104]
1 <= Nodo.val <= 50
0 <= valore <= 50

Idee per le risposte:

Quello che segue è il codice che utilizza Java per risolvere il problema della rimozione di elementi da un elenco collegato:

  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. }

L'idea di questo codice è: creare un nodo testa virtuale 'manichino ', punta il suo puntatore 'successivo' al nodo principale 'head' dell'elenco collegato originale. Quindi, attraversa l'elenco collegato attraverso un ciclo e quando viene incontrato un nodo con un valore uguale a "val", viene eliminato dall'elenco collegato. Infine, viene restituito il nodo 'successivo' di 'dummy', che è il nodo principale della nuova lista collegata dopo aver eliminato il nodo del valore specificato.
(L'articolo è un riassunto e un riferimento ad alcune esperienze personali dell'autore nel processo di apprendimento di Java. Se ci sono posti inappropriati o sbagliati, criticali e correggili. Lavoreremo duro per correggerli. Se c'è qualche violazione , si prega di contattare l'autore per eliminare il post.)