Java实现:如何在双向链表中间添加整数或字符串元素?
Java双向链表:在指定值的两个节点间插入元素的实现方案
你的现有代码已经实现了核心的addBetween方法,要在值为40和30的节点之间插入元素,关键是找到值为40的前驱节点和值为30的后继节点,再调用addBetween完成插入。以下是具体实现步骤和代码修改:
1. 添加查找节点的辅助方法
首先需要一个根据元素值查找对应Node对象的工具方法,注意用equals而非==比较元素(适配包装类、字符串等类型的正确比较):
// 在DoublyLinkedList类中添加 private Node<E> findNode(E value) { if (isEmpty()) return null; Node<E> current = header.getNext(); while (current != trailer) { if (value.equals(current.getElement())) { return current; } current = current.getNext(); } return null; }
2. 实现公开的插入方法
添加一个公开方法,用于在指定值的两个节点之间插入新元素,同时做合法性校验(确保前驱节点的下一个确实是后继节点,避免插入错误位置):
// 在DoublyLinkedList类中添加 public boolean insertBetweenValues(E prevValue, E nextValue, E newElement) { Node<E> prevNode = findNode(prevValue); Node<E> nextNode = findNode(nextValue); // 校验:两个节点都存在,且prevNode的下一个是nextNode if (prevNode == null || nextNode == null || !prevNode.getNext().equals(nextNode)) { System.out.println("无法找到指定的相邻节点对"); return false; } addBetween(newElement, prevNode, nextNode); return true; }
3. 测试插入功能
修改Main类中的测试代码,调用新方法在40和30之间插入元素(比如插入25):
class Main { public static void main(String[] args) { // 注意指定泛型类型,避免原始类型警告 DoublyLinkedList<Integer> list = new DoublyLinkedList<>(); // Add nodes to the list list.addFirst(10); list.addFirst(20); list.addFirst(30); list.addFirst(40); list.addFirst(50); list.removeFirst(); list.removeLast(); // 在值为40和30的节点之间插入25 list.insertBetweenValues(40, 30, 25); // print the nodes of DoublyLinkedList System.out.println(list); // 输出:(40--> 25--> 30--> 20) } }
关键逻辑说明
findNode方法遍历链表,从header的下一个节点开始,直到trailer,找到匹配值的节点返回。insertBetweenValues方法先校验两个节点的合法性:必须都存在,且前驱节点的直接后继就是目标后继节点,防止插入到错误的位置。- 校验通过后,直接调用已有的
addBetween方法完成节点插入,复用现有逻辑保证代码一致性。
内容的提问来源于stack exchange,提问作者kolakolya
相关产品推荐
相关产品推荐

