Berbagi teknologi

Pembelajaran JAVA - berlatih menggunakan Java untuk mengimplementasikan "menghapus elemen daftar tertaut"

2024-07-12

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

pertanyaan:

Mengingat head node head dari daftar tertaut dan val bilangan bulat, harap hapus semua node dalam daftar tertaut yang memenuhi Node.val == val dan kembalikan node head baru.

Contoh 1:

Masukan: head = [1,2,6,3,4,5,6], val = 6
Keluaran: [1,2,3,4,5]
Contoh 2:

Masukan: kepala = [], val = 1
Keluaran: []
Contoh 3:

Masukan: kepala = [7,7,7,7], val = 7
Keluaran: []
petunjuk:

Jumlah node dalam daftar berada dalam rentang [0, 104]
1 <= Node.val <= 50
0 <= nilai <= 50

Jawaban ide:

Berikut ini adalah kode yang menggunakan Java untuk menyelesaikan masalah penghapusan elemen dari daftar tertaut:

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

Ide dari kode ini adalah: membuat node kepala virtual 'contoh ', arahkan penunjuk 'berikutnya' ke simpul kepala 'kepala' dari daftar tertaut asli. Kemudian, lintasi daftar tertaut melalui satu perulangan, dan ketika sebuah simpul dengan nilai yang sama dengan 'val' ditemukan, simpul tersebut akan dihapus dari daftar tertaut. Akhirnya, simpul 'berikutnya' dari 'dummy' dikembalikan, yang merupakan simpul utama dari daftar tertaut baru setelah menghapus simpul nilai yang ditentukan.
(Artikel ini merupakan rangkuman dan referensi dari beberapa pengalaman pribadi penulis dalam proses belajar Java. Jika ada bagian yang kurang tepat atau salah mohon dikritik dan dikoreksi. Kami akan bekerja keras untuk memperbaikinya. Jika ada pelanggaran , silakan hubungi penulis untuk menghapus postingan tersebut.)