ZBLOG

循环双链表1和循环双链表2合并后,将循环双链表2设置为空,用java写

以下是用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助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?