以下是使用Java编写的深拷贝函数示例,使用了CirDoublyList类来实现:
import java.util.ArrayList;
class CirDoublyList<T> {
private Node<T> head;
private int size;
// 内部节点类
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() {
head = new Node<>(null);
head.prev = head.next = head;
size = 0;
}
public void add(T data) {
Node<T> newNode = new Node<>(data);
newNode.prev = head.prev;
newNode.next = head;
head.prev.next = newNode;
head.prev = newNode;
size++;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if (size > 0) {
Node<T> current = head.next;
while (current != head) {
sb.append(current.data).append(" ");
current = current.next;
}
return sb.toString().trim();
}
return "";
}
// 深拷贝构造函数
public CirDoublyList(CirDoublyList<T> list) {
this();
for (T item : list.toArray()) { // 假设toArray()方法将链表转为数组
add(item);
}
}
}
public class Main {
public static void main(String[] args) {
// 创建原始链表
CirDoublyList<Integer> originalList = new CirDoublyList<>();
originalList.add(1);
originalList.add(2);
originalList.add(3);
// 进行深拷贝
CirDoublyList<Integer> copyList = new CirDoublyList<>(originalList);
// 验证结果
System.out.println("原始链表: " + originalList.toString());
System.out.println("拷贝链表: " + copyList.toString());
}
}
上述代码中,首先定义了一个CirDoublyList类,它表示循环双向链表,并实现了添加节点的功能。然后,在主函数中创建一个原始链表originalList,并使用深拷贝构造函数创建了一个copyList作为副本。最后,通过打印验证原始链表和拷贝链表的内容是否一致。
请注意,此示例仅演示了基本的深拷贝方法,并假设toArray()方法已经实现将链表转换为数组。在实际应用中,您可能需要根据具体需求来适配和修改这段代码。
内容由零声教学AI助手提供,问题来源于学员提问




