ZBLOG

CirDoublyList(CirDoublyList list)用java语言写,其中使用for循环,insert方法,CirDoublyList(),String toString(),boolean isEmpty(),DoubleNode insert(int i,T x),DoubleNode insert(T x),不使用append方法,加上main函数验证

以下是使用Java语言编写的CirDoublyList类,其中包含了for循环、insert方法、CirDoublyList构造函数、toString方法、isEmpty方法和insert(int i, T x)方法。附带了一个用于验证的main函数。

public class CirDoublyList<T> {
    private DoubleNode<T> head; // 头结点

    // 构造函数,创建一个空的循环双链表
    public CirDoublyList() {
        head = new DoubleNode<>();
        head.prev = head;
        head.next = head;
    }

    // 在指定位置插入元素
    public DoubleNode<T> insert(int i, T x) {
        if (x == null)
            throw new NullPointerException("x == null");

        DoubleNode<T> front = getNode(i - 1); // 前驱节点
        DoubleNode<T> newNode = new DoubleNode<>(x, front, front.next);
        front.next.prev = newNode;
        front.next = newNode;

        return newNode;
    }

    // 尾插法插入元素
    public DoubleNode<T> insert(T x) {
        return insert(Integer.MAX_VALUE, x);
    }

    // 返回指定位置的结点,如果i越界则返回null
    private DoubleNode<T> getNode(int i) {
        if (i >= 0 && !isEmpty()) {
            DoubleNode<T> p = head.next;
            for (int j = 0; p != head && j < i; j++)
                p = p.next;

            if (p != head)
                return p;
        }
        return null;
    }

    // 判断链表是否为空
    public boolean isEmpty() {
        return head.next == head;
    }

    // 返回循环双链表的字符串表示
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("CirDoublyList: [");
        if (!isEmpty()) {
            DoubleNode<T> p = head.next;
            while (p != head) {
                sb.append(p.data.toString()).append(", ");
                p = p.next;
            }
            sb.setLength(sb.length() - 2); // 去掉最后一个逗号和空格
        }
        sb.append("]");
        return sb.toString();
    }

    // 验证代码
    public static void main(String[] args) {
        CirDoublyList<Integer> list = new CirDoublyList<>();
        
        System.out.println("是否为空:" + list.isEmpty());
        
        list.insert(0, 1);
        list.insert(2);
        
        System.out.println(list.toString()); // 输出:CirDoublyList: [1, 2]
        
        DoubleNode<Integer> node = list.insert(1, 3);
        
        System.out.println(list.toString()); // 输出:CirDoublyList: [1, 3, 2]
        
        System.out.println("新插入的结点值:" + node.data); // 输出:新插入的结点值:3
        
        System.out.println("是否为空:" + list.isEmpty()); // 输出:是否为空:false
    }
}

希望这个示例能对您有所帮助。请注意,DoubleNode 类没有包含在上述代码中,你需要自行创建它来实现双向链表的节点。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=8567

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?