ZBLOG

public class CirDoublelyList { public DoubleNode head; public DoubleNode rear; public CirDoublelyList() { this.head=new DoubleNode(); this.head.prev=this.head; this.head.next=this.head; } p...

以下是修改后的代码:

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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?