以下是用Java编写的将两个循环双链表合并,并将第二个循环双链表设置为空的示例代码:
class Node {
int data;
Node prev;
Node next;
public Node(int data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
class DoublyLinkedList {
Node head;
// 添加节点到循环双链表尾部
public void addToEnd(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
head.prev = head;
head.next = head;
} else {
Node lastNode = head.prev;
lastNode.next = newNode;
newNode.prev = lastNode;
newNode.next = head;
head.prev = newNode;
}
}
// 合并两个循环双链表,并将第二个链表设置为空
public static void mergeAndSetEmpty(DoublyLinkedList list1, DoublyLinkedList list2) {
if (list1.head == null && list2.head == null) return;
if (list1.head == null) {
list1.head = list2.head;
} else if (list2.head != null) {
Node lastNodeList1 = list1.head.prev; // 最后一个节点
Node firstNodeList2 = list2.head; // 第一个节点
lastNodeList1.next = firstNodeList2; // 连接最后一个节点和第一个节点
firstNodeList2.prev=lastNodeList1; // 建立连接
Node lastNodeList2=list2.head.prev; //最后一个节点
lastNodeList2.next=list1.head; // 连接最后一个节点和原循环双链表头部
list1.head.prev=lastNodeList2; //建立连接
list2.head=null; // 将list2设置为空
}
}
// 打印循环双链表元素
public void print() {
if (head == null) return;
Node currentNode = head;
do {
System.out.print(currentNode.data + " ");
currentNode = currentNode.next;
} while (currentNode != head);
}
}
public class Main {
public static void main(String[] args) {
DoublyLinkedList list1 = new DoublyLinkedList();
list1.addToEnd(1);
list1.addToEnd(2);
list1.addToEnd(3);
DoublyLinkedList list2 = new DoublyLinkedList();
list2.addToEnd(4);
list2.addToEnd(5);
System.out.println("Before merging:");
System.out.print("List 1: ");
list1.print();
System.out.println();
System.out.print("List 2: ");
list2.print();
System.out.println();
DoublyLinkedList.mergeAndSetEmpty(list1, list2);
System.out.println("After merging:");
System.out.print("List 1: ");
list1.print();
System.out.println();
System.out.print("List 2: ");
if (list2.head == null) {
System.out.println("Empty");
} else {
list2.print();
System.out.println();
}
}
}
这段代码定义了一个 Node
类表示双向链表的节点,以及一个 DoublyLinkedList
类表示双向链表的数据结构。addToEnd()
方法用于向循环双链表尾部添加节点,mergeAndSetEmpty()
方法用于合并两个循环双链表,并将第二个链表设置为空。最后,在 main
函数中创建两个循环双链表对象,并进行合并和输出测试。
内容由零声教学AI助手提供,问题来源于学员提问