ZBLOG

深拷贝list,用CirDoublyList(CirDoublyList list) ,用java写,加main函数验证

好的,下面是一个使用CirDoublyList实现深拷贝的示例代码(Java):

public class CirDoublyList<T> {
    private Node<T> head;
    
    // 内部节点类
    private static class Node<T> {
        T data;
        Node<T> prev;
        Node<T> next;

        public Node(T data) {
            this.data = data;
            this.prev = null;
            this.next = null;
        }
    }

    // 构造函数
    public CirDoublyList(CirDoublyList<T> list) {
        if (list.head == null) {
            this.head = null;  // 如果原链表为空,则新链表也为空
        } else {
            // 复制头结点,并将新链表的头指针指向该节点
            this.head = new Node<>(list.head.data);

            Node<T> currentNode = list.head.next;  // 当前遍历到的节点

            while (currentNode != list.head) {  // 遍历原链表直到回到头结点
                insertAtEnd(currentNode.data);   // 将当前节点数据插入新链表尾部

                currentNode = currentNode.next;  // 继续遍历下一个节点
            }
        }
    }

    // 在链表末尾插入元素
    public void insertAtEnd(T data) {
        Node<T> newNode = new Node<>(data);

        if (head == null) {  // 空链表情况下,将头结点设置为新节点并形成循环
            head = newNode;
            head.prev = head;
            head.next = head;
        } else {  // 非空链表情况下,在尾部插入新节点
            Node<T> lastNode = head.prev;
            
            newNode.prev = lastNode;
            newNode.next = head;

            lastNode.next = newNode;
            head.prev = newNode;
        }
    }

    // 打印链表元素
    public void printList() {
        if (head == null) {
            System.out.println("Empty list");
            return;
        }

        Node<T> currentNode = head;

        do {
            System.out.print(currentNode.data + " ");
            currentNode = currentNode.next;
        } while (currentNode != head);

        System.out.println();
    }

    // 主函数用于验证
    public static void main(String[] args) {
        CirDoublyList<Integer> originalList = new CirDoublyList<>();
        
        originalList.insertAtEnd(1);
        originalList.insertAtEnd(2);
        originalList.insertAtEnd(3);
        
        System.out.print("Original list: ");
        originalList.printList();

        
        CirDoublyList<Integer> copiedList = new CirDoublyList<>(originalList);

        System.out.print("Copied list: ");
        copiedList.printList();
    }
}

上述代码中,我们使用CirDoublyList类实现了一个循环双向链表,并通过CirDoublyList的构造函数实现了深拷贝功能。在主函数中,我们创建了一个原始的循环双向链表originalList,然后使用构造函数创建了一个深拷贝的副本copiedList,并打印验证两个链表是否相同。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?