循环链表insert方法中应在哪个位置抛出ListOverflowException异常
链表insert方法异常抛出位置修正方案
你需要在所有插入操作执行之前抛出ListOverflowException,原因很简单:如果已经修改了链表节点的指向再抛异常,会导致链表结构被破坏,产生脏数据。
另外你现有代码存在逻辑bug:首节点为空的if分支没有加else,首次插入节点时,if块内的逻辑执行完还会继续跑后续的endOfNode.setNext(iterator)等赋值代码,会重复设置节点指向,需要一并修复。
你需要先给链表类新增一个最大容量的成员变量,比如private final int maxCapacity,初始化链表时指定节点数上限值。修正后的完整代码如下:
public void insert(D data) throws ListOverflowException { // 第一步先校验容量,不符合插入条件直接抛出异常,此时未修改任何链表结构 if (sizeOfList >= maxCapacity) { throw new ListOverflowException("Error! Can't add any more nodes"); } Node<D> iterator = new Node<>(data); if(startOfNode == null) { startOfNode = iterator; endOfNode = iterator; iterator.setNext(startOfNode); } else { // 新增else,避免首节点插入时重复执行后续逻辑 endOfNode.setNext(iterator); endOfNode = iterator; endOfNode.setNext(startOfNode); } sizeOfList; // 更新列表的节点数量 }
内容的提问来源于stack exchange,提问作者user15082428
相关产品推荐
相关产品推荐

