为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java的参数中使用索引的递归创建删除方法?

如何在Java的参数中使用索引的递归创建删除方法?

扬帆大鱼 2022-09-14 10:30:24
我在如何启动此方法时遇到问题。我正在尝试使用代码中的递归创建一个 remove 方法。基本上我有一个公共和私人的删除方法。remove(int) 方法(公共)应删除列表中指定索引处的元素。我需要解决列表为空和/或删除的元素是列表中第一个元素的情况。如果索引参数无效,则应引发“索引超出边界异常”。为了允许递归实现,此方法应解决特殊情况并委托删除(int,int,Node)以进行递归。下面是类:public class SortedLinkedList<E extends Comparable<E>>{    private Node first;    private int size;    // ...}代码如下:public void remove(int index){    if(index < 0 || index > size)    {        throw new IndexOutOfBoundsException();    }    remove(index++, 0, first);    if (index == 0)    {        if(size == 1)        {            first = null;        }        else        {            first = first.next;        }    }    size--;}和私有方法:private void remove(int index, int currentIndex, Node n){    if(index == currentIndex)    {        remove(index, currentIndex, n.next);    }    remove(index, currentIndex, n.next.next);}私人课程:private class Node{    private E data;    private Node next;    public Node(E data, Node next)    {        this.data = data;        this.next = next;    }}
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

返回void

使用两个索引

private void remove(int index, int current, Node n) {

  if (n == null || index <= 0 || (index == 1 && n.next == null) {

    throw new IndexOutOfBoundsException();

  }

  if (current == index - 1) {

    // Remove 'n.next'.

    n.next = n.next.next; 

  } else {

    remove(index, current + 1, n.next);

  }

}

用法

public void remove(int index) {

  if (first == null || index < 0) {

    throw new IndexOutOfBoundsException();

  }

  if (index == 0) {

    // Remove 'first'.

    first = first.next;

  } else {

    remove(index, 0, first);

  }

  size--;

}

使用一个索引

只需要一个索引:


private void remove(int index, Node n) {

  if (n == null || index <= 0 || (index == 1 && n.next == null) {

    throw new IndexOutOfBoundsException();

  }

  if (index == 1) {

    // Remove 'n.next'.

    n.next = n.next.next; 

  } else {

    remove(index - 1, n.next);

  }

}

用法

public void remove(int index) {

  if (first == null || index < 0) {

    throw new IndexOutOfBoundsException();

  }

  if (index == 0) {

    // Remove 'first'.

    first = first.next;

  } else {

    remove(index, first);

  }

  size--;

}

返回Node

更好的是返回而不是:Nodevoid


private Node remove(int index, Node n) {

  if (n == null || index < 0) {

    throw new IndexOutOfBoundsException();

  }

  if (index == 0) {

    // Remove 'n' and return the rest of the list.

    return n.next; 

  }

  // 'n' stays. Update the rest of the list and return it.

  n.next = remove(index - 1, n.next);

  return n;

}

用法

public void remove(int index) {

  first = remove(index, first);

  size--;

}


查看完整回答
反对 回复 2022-09-14
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信