首页后端开发其他后端知识java里面复制多向链表的方法步骤是什么

java里面复制多向链表的方法步骤是什么

时间2024-03-27 19:32:04发布访客分类其他后端知识浏览1589
导读:在这篇文章中我们会学习到关于“java里面复制多向链表的方法步骤是什么”的知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家学习或工作能有帮助。下面就请大家跟着小编的思路一起来学习一下吧。 多向链表结...
在这篇文章中我们会学习到关于“java里面复制多向链表的方法步骤是什么”的知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家学习或工作能有帮助。下面就请大家跟着小编的思路一起来学习一下吧。



多向链表结构如

(视频教程推荐:java课程)

public class Node{
    
    public int value;
    
    public Node next;
    
    public Node rand;

    public Node(int data){
    
        this.value = data;

       }

}

方法一:使用HashMap结构

public class CopyFromMultiNode {

    public static void main(String[] args){

        int[] array = {
12,3,4,5,6,77,6,54,56,6,7,87,15,15,15}
    ;
    
        //数组转Node
        Node head = array2node(array);
    
        Node help = head;
    
        System.out.print("处理前     ");

        while(help != null){
    
            System.out.print(help.value + " ");
    
            help = help.next;

        }
    
 
        //使用HashMap结构
        Node res = copyFromRand1(head);
    
        System.out.println();
    
        System.out.print("处理后结果:");

        while(res != null){
    
            System.out.print(res.value+" ");
    
            res = res.next;

        }

    }

 
    //使用HashMap结构
    public static Node copyFromRand1(Node head){
    
        Node cur = head;
    
        HashMapNode, Node>
     map = new HashMap>
    ();

        while(cur != null){
    
            map.put(cur, new Node(cur.value));
    
            cur = cur.next;

        }
    
        cur = head;

        while(cur != null){
    
            map.get(cur).next = map.get(cur.next);
    
            map.get(cur).rand = map.get(cur.rand);
    
            cur = cur.next;

        }
    
        return map.get(head);

    }

 
    //数组转Node功能,供测试使用
    public static Node array2node(int[] array){
    
        Node head = new Node(array[0]);
    
        Node cur = head;
    
        for(int i=1;
     iarray.length;
 i++){
    
            cur.next = new Node(array[i]);
    
            cur = cur.next;

        }
    
        return head;

    }

 
    //基础node节点结构
    public static class Node{
    
        public int value;
    
        public Node next;
    
        public Node rand;

        public Node(int data){
    
            this.value = data;

        }

    }

}

2、使用几个有效变量方法,无需其他结构

    //使用几个有效变量方法
    //替换方法一的copyFromRand1方法
    public static Node copyFromRand2(Node head){
    
        Node next = null;
    
        Node cur = head;
    
        //1 ->
     2 ->
     3 ->
     4 ==>
     1 ->
     1` ->
     2 ->
     2` ->
     3 ->
     3` ->
     4 ->
 4
        //完成链表拼接
        while(cur != null){
    
            next = cur.next;
    
            cur.next = new Node(cur.value);
    
            cur.next.next = next;
    
            cur = next;

        }
    
        cur = head;
    
        Node curCopy = null;

        //添加Node的rand值
        while(cur != null){
    
            next = cur.next.next;
    
             curCopy = cur.next.next;
    
             curCopy = cur.rand != null? cur.rand.next: null;
    
            cur = next;

        }
    
        Node res = head.next;
    
        cur = head;
    
        //拆分
        //  1 ->
     1` ->
     2 ->
     2` ->
     3 ->
     3` ->
     4 ->
     4
        //   ==>
      1 ->
     2 ->
     3 ->
     4  和 1`->
     2`->
     3`->
 4`
        while(cur != null){
    
            next = cur.next.next;
    
            curCopy = cur.next;
    
            cur.next = next;
    
            curCopy.next = next != null ? next.next:null;
    
            cur = next;

        }
    
        return res;

    }
    



以上就是关于“java里面复制多向链表的方法步骤是什么”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

java

若转载请注明出处: java里面复制多向链表的方法步骤是什么
本文地址: https://pptw.com/jishu/654431.html
gateway跨域问题解决方案是什么,怎样做 为什么mysql插入数据会变慢,原因是什么

游客 回复需填写必要信息