以下是用Java编写的深拷贝方法和示例代码,其中使用了CirDoublyList类来表示一个循环双向链表。在main函数中,我们创建了一个原始链表对象并进行了深拷贝,然后分别修改原始链表和深拷贝后的链表,以验证它们之间的独立性。
”`java import java.util.ArrayList; import java.util.List;
class CirDoublyListNode
T data;
CirDoublyListNode<T> prev;
CirDoublyListNode<T> next;
public CirDoublyListNode(T data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
class CirDoublyList
private int size;
private CirDoublyListNode<T> head;
public CirDoublyList() {
this.size = 0;
this.head = null;
}
public void add(T data) {
if (head == null) {
head = new CirDoublyListNode<>(data);
head.prev = head;
head.next = head;
} else {
CirDoublyListNode<T> newNode = new CirDoublyListNode<>(data);
newNode.prev = head.prev;
newNode.next = head;
head.prev.next = newNode;
head.prev = newNode;
}
size++;
}
public void printList() {
if (head == null) return;
CirDoublyListNode<T> current = head;
do {
System.out.print(current.data + " ");
current = current.next;
} while (current != head);
System.out.println();
}
public CirDoublyList<T> deepCopy() {
if (head == null) return null;
CirDoublyList<T> newList = new CirDoublyList<>();
CirDoublyListNode<T> current = head;
do {
newList.add(current.data);
current = current.next;
} while (current != head);
return newList;
}
}
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> copiedList = new CirDoublyList<>(originalList);
System.out.println("原始链表:");
originalList.printList();
System.out.println("深拷贝后的链表:");
copiedList.printList();
// 修改原始链表
<br/><br/><br/><font size=1 color=#CCCCCC>内容由零声教学AI助手提供,问题来源于学员提问</font>