java复制多向链表的方法

互联网 20-10-30

多向链表结构如

(视频教程推荐: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;         HashMap<Node, 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; i<array.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入门

以上就是java复制多向链表的方法的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 多向链表
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java实现猜字小游戏

相关资讯