以下是修改后的代码:
public class CirDoublyList<T> {
public DoubleNode<T> head;
public DoubleNode<T> rear;
public CirDoublyList() {
this.head = new DoubleNode<T>();
this.head.prev = this.head;
this.head.next = this.head;
}
public String toString() {
String str = this.getClass().getName() + "(";
for (DoubleNode<T> p = this.head.next; p != this.head; p = p.next)
str += p.data.toString() + (p.next != this.head ? "," : "");
return str + ")";
}
public DoubleNode<T> insert(T x) {
if (x == null)
return null;
DoubleNode<T> q = new DoubleNode<T>(x, head.prev, head);
head.prev.next = q;
head.prev = q;
return q;
}
public CirDoublyList(DoublyList<T> list) {
this();
DoubleNode<T> rear = this.head.prev;
rear.next = list.head.next;
list.head.next.prev = rear;
rear=list.rear;
rear.next=this.head;
this.head.prev=rear;
list.clear();
}
public void concat(DoublyList<T> list) {
if(list.isEmpty())
return ;
DoubleNode<T> first=this.head.next,
last=first.prev,
second=list.getLast();
first.prev=last.second=second.last=head.first=null;//断开两表首尾节点
last.next=second;//链接末端节点
second.prev=last;//链接末端节点
last=node1=null;//释放空对象
node2.value=null;
rear=second.rear;//设置尾指针
}
public void addAll(DoublyList<T> list) {
DoubleNode<T> p = list.head.next;
while (p != null) {
this.insert(p.data);
p = p.next;
}
}
public CirDoublyList<T> union(DoublyList<T> list) {
CirDoublyList<T> result = new CirDoublyList<T>(this);
result.addAll(list);
return result;
}
public static void main(String[] args) {
DoublyList<Integer> list1 = new DoublyList<Integer>();
DoublyList<Integer> list2 = new DoublyList<Integer>();
for (int i = 1; i <= 5; i++)
list1.insert(i);
for (int i = 6; i <= 10; i++)
list2.insert(i);
System.out.println("list1: " + list1.toString());
System.out.println("list2: " + list2.toString());
CirDoublyList<Integer> cdl = new CirDoublyList<>(list1);
System.out.println("CirDoublyList after adding List1: " + cdl.toString());
cdl.concat(list2);
System.out.println("CirDoublyList after concatenating List2: " + cdl.toString());
CirDoublyList<Integer> unionedList = cdl.union(list2);
System.out.println("Union of CirDoublyList and List2: " + unionedList.toString());
}
}
修改的部分主要包括:
- 在构造函数
CirDoubleLyist(DoublyLst<T>)中使用了新的逻辑,将双链表list的元素添加到循环双链表中,并清空原始双链表。 - 添加了
concat(DoublyList<T>)方法,用于将双链表list追加到循环双链表中。 - 添加了
addAll(DoublyList<T>)方法,用于将双链表list的所有元素添加到循环双链表中。 - 添加了
union(DoublyList<T>)方法,用于返回循环双链表和双链表list的并集。
在示例代码中展示了对这些方法的使用。
内容由零声教学AI助手提供,问题来源于学员提问




