Heim > Java > JavaErste Schritte > So kopieren Sie eine mehrwegverkettete Liste in Java

So kopieren Sie eine mehrwegverkettete Liste in Java

王林
Freigeben: 2020-10-30 16:12:21
nach vorne
2370 Leute haben es durchsucht

So kopieren Sie eine mehrwegverkettete Liste in Java

Mehrfach verknüpfte Listenstruktur wie

(Video-Tutorial-Empfehlung: Java-Kurs)

public class Node{
    public int value;
    public Node next;
    public Node rand;
    public Node(int data){
        this.value = data;
       }
}
Nach dem Login kopieren

Methode 1: Verwenden Sie die HashMap-Struktur

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;
        }
    }
}
Nach dem Login kopieren

2. Verwenden Sie mehrere effektive Variablenmethoden ohne andere Strukturen

    //使用几个有效变量方法
    //替换方法一的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;
    }
Nach dem Login kopieren

Verwandt Tutorials Empfohlen: Erste Schritte mit Java

Das obige ist der detaillierte Inhalt vonSo kopieren Sie eine mehrwegverkettete Liste in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage