You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在双向链表头部添加新节点?并改造为泛型实现

修正双向链表并实现泛型支持与头部插入功能

问题分析

现有代码存在几个关键问题:

  • SLList类未声明泛型,无法支持任意类型元素
  • 内部节点类IntNode的data是int类型,只能存储整数,且泛型<T>未实际使用
  • 节点的previous/next未指定泛型类型,存在类型不安全问题
  • addFirst方法缺少参数名,且未实现核心逻辑

完整修正代码

public class SLList<T> {
    // 内部泛型节点类,重命名为Node更贴合通用场景
    private class Node {
        private T data;
        private Node previous;
        private Node next;

        public Node(T data, Node previous, Node next) {
            this.data = data;
            this.previous = previous;
            this.next = next;
        }
    }

    private Node firstSen;
    private Node lastSen;

    public SLList() {
        // 哨兵节点不需要存储有效业务数据,传入null即可
        firstSen = new Node(null, null, null);
        lastSen = new Node(null, firstSen, null);
        firstSen.next = lastSen;
    }

    // 实现头部插入方法
    public void addFirst(T item) {
        // 1. 创建新节点:前驱指向头哨兵,后继指向头哨兵原本的下一个节点
        Node newNode = new Node(item, firstSen, firstSen.next);
        // 2. 调整原头哨兵后继节点的前驱指向新节点
        firstSen.next.previous = newNode;
        // 3. 调整头哨兵的后继指向新节点,完成插入
        firstSen.next = newNode;
    }

    // 可选:添加打印方法验证链表结构
    public void printList() {
        Node current = firstSen.next;
        while (current != lastSen) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }
}

关键改动说明

  • 泛型声明:给SLList类加上<T>,表示这是一个支持任意引用类型的链表(若需支持基本类型,需使用对应包装类如Integer、Double等)
  • 节点类改造:将IntNode重命名为Node,把data类型从int改为T,让节点可以存储任意类型数据;同时明确previous和next的类型为Node,避免类型转换隐患
  • 哨兵节点初始化:哨兵仅用于维护链表边界,无需存储业务数据,构造时传入null即可
  • addFirst核心逻辑:通过三步指针调整,将新节点插入到头哨兵与原第一个节点之间,保证双向链表的结构完整性

使用示例

public class Main {
    public static void main(String[] args) {
        // 存储字符串的链表
        SLList<String> strList = new SLList<>();
        strList.addFirst("World");
        strList.addFirst("Hello");
        strList.printList(); // 输出:Hello World

        // 存储整数的链表
        SLList<Integer> intList = new SLList<>();
        intList.addFirst(2024);
        intList.addFirst(100);
        intList.printList(); // 输出:100 2024
    }
}

内容的提问来源于stack exchange,提问作者Nutnicha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:25:30