기술나눔

JAVA 학습 - Java를 사용하여 "연결된 목록 요소 제거" 구현 연습

2024-07-12

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

질문:

연결된 목록의 헤드 노드 헤드와 정수 val이 주어지면 연결 목록에서 Node.val == val을 만족하는 모든 노드를 삭제하고 새 헤드 노드를 반환합니다.

예시 1:

입력: 머리 = [1,2,6,3,4,5,6], 발 = 6
출력: [1,2,3,4,5]
예 2:

입력: head = [], val = 1
출력: []
예시 3:

입력: 헤드 = [7,7,7,7], 발 = 7
출력: []
힌트:

목록의 노드 수는 [0, 104] 범위에 있습니다.
1 <= 노드.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. }

이 코드의 아이디어는 '가상 헤드 노드'를 생성하는 것입니다.가짜의 ', 원래 연결 목록의 헤드 노드 'head'에 대한 '다음' 포인터를 가리킵니다. 그런 다음 루프를 통해 연결 리스트를 순회하다가 'val'과 같은 값을 가진 노드를 만나면 연결 리스트에서 삭제됩니다. 마지막으로 지정된 값 노드를 삭제한 후 새 연결 리스트의 선두 노드인 'dummy'의 '다음' 노드가 반환됩니다.
(본 글은 작성자가 Java를 학습하는 과정에서 겪은 개인적인 경험을 요약하고 참고한 것입니다. 부적절하거나 잘못된 부분이 있으면 비판 및 정정해 주시기 바랍니다. 열심히 수정하도록 하겠습니다. 침해하는 부분이 있으면 수정하도록 하겠습니다. , 게시물 삭제를 원하시면 작성자에게 연락주시기 바랍니다.)