一个关于java递归的问题

2025-01-05 18:38:22
推荐回答(1个)
回答1:

insert、remove、retrieve、search方法代码,未测试:


    public void insert(E data) {
      if (data == null) {
        return;
      }
      Node dummyHead = new Node(null);
      dummyHead.next = head;
      insert(dummyHead, data);
      head = dummyHead.next;
      dummyHead.next = null;
    }

    public void insert(Node pre, E data) {
      Node cur = pre.next;
      if (cur == null || data.compareTo(cur.data) <= 0) {
        Node node = new Node(data);
        node.next = cur.next;
        cur.next = node;
      } else {
        insert(pre.next, data);
      }
    }

    public void remove(E data) {
      if (head == null) {
        return;
      }
      Node dummyHead = new Node(data);
      dummyHead.next = head;
      remove(dummyHead, data);
      head = dummyHead.next;
      dummyHead.next = null;
    }

    private void remove(Node pre, E data) {
      if (pre == null || pre.next == null) {
        return;
      }
      Node cur = pre.next;
      if (cur.data == data || cur.data != null && cur.data.equals(data)) {
        pre.next = cur.next;
        cur.next = null;
      } else {
        remove(pre.next, data);
      }
    }

    public E retrieve(int index) {
      return retrieve(head, index);
    }

    private E retrieve(Node head, int index) {
      if (head == null || index < 0) {
        return null;
      }
      if (index == 0) {
        return head.data;
      }
      return retrieve(head.next, index - 1);
    }

    public boolean search(E data) {
      return search(head, data);
    }

    private boolean search(Node head, E data) {
      if (head == null) {
        return false;
      }
      if (head.data == data || head.data != null && head.data.equals(data)) {
        return true;
      }
      return search(head.next, data);
    }
  }