Обмен технологиями

Изучение JAVA - практика использования Java для реализации «удаления элементов связанного списка».

2024-07-12

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

вопрос:

Учитывая заголовок головного узла связанного списка и целочисленное значение, удалите все узлы в связанном списке, которые удовлетворяют Node.val == val, и верните новый головной узел.

Пример 1:

Ввод: голова = [1,2,6,3,4,5,6], значение = 6
Выход: [1,2,3,4,5]
Пример 2:

Ввод: head = [], val = 1
Выход: []
Пример 3:

Ввод: head = [7,7,7,7], val = 7
Выход: []
намекать:

Количество узлов в списке находится в диапазоне [0, 104]
1 <= Node.val <= 50
0 <= значение <= 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. }

Идея этого кода такова: создать виртуальный головной узел'дурачок ', направьте его указатель 'next' на головной узел 'head' исходного связанного списка. Затем пройдите по связанному списку через цикл, и когда встречается узел со значением, равным «val», он удаляется из связанного списка. Наконец, верните «следующий» узел «dummy», который является головным узлом нового связанного списка после удаления указанного узла значения.
(Статья представляет собой обобщение и отсылку к некоторому личному опыту автора в процессе изучения Java. Если есть какие-то неуместные или неправильные места, пожалуйста, критикуйте и исправляйте их. Мы приложим все усилия, чтобы их исправить. Если есть какие-либо нарушения , пожалуйста, свяжитесь с автором, чтобы удалить сообщение.)