Heim > Java > javaLernprogramm > Java implementiert die gemeinsame Nutzung von Kopiercode für komplexe verknüpfte Listen

Java implementiert die gemeinsame Nutzung von Kopiercode für komplexe verknüpfte Listen

黄舟
Freigeben: 2017-10-17 10:06:15
Original
1444 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die Java-Interviewfrage vorgestellt – das Teilen des Kopiercodes zum Implementieren einer komplexen verknüpften Liste. Der Herausgeber findet es ziemlich gut und hat einen Referenzwert.

Abschließende Fragen zur Online-Programmierung von Alibaba, schreiben Sie sie auf und teilen Sie sie mit allen

Es gibt eine einseitig verknüpfte Liste. Jeder Knoten enthält einen zufälligen Zeiger, der auf einen Knoten in dieser verknüpften Liste zeigt oder auf „Leer“ schreiben Sie eine Deep-Copy-Funktion, um die gesamte verknüpfte Liste einschließlich des Zufallszeigers zu kopieren. Berücksichtigen Sie nach Möglichkeit mögliche Ausnahmen.

Der Algorithmus ist wie folgt:


/*
public class RandomListNode {
  int label;
  RandomListNode next = null;
  RandomListNode random = null;
  RandomListNode(int label) {
    this.label = label;
  }
}
*/
public class Solution {
  public RandomListNode Clone(RandomListNode pHead)
  {
    copyNodes(pHead);
    setClonedNodes(pHead);
    return splitNodes(pHead);
  }
    //第一步,复制链表任意结点N并创建新结点N‘,再把N'链接到N的后面
   public static void copyNodes(RandomListNode head){ 
    RandomListNode temp = head;
    while(temp!=null){
     RandomListNode clonedNode = new RandomListNode(0);
     clonedNode.next = temp.next;
     clonedNode.label = temp.label;
     clonedNode.random = null;
     temp.next = clonedNode;
     temp = clonedNode.next;
    }
   }
   //第二步,设置复制出来的结点
   public static void setClonedNodes(RandomListNode head){
    RandomListNode pNode = head;
    while(pNode!=null){
     RandomListNode pCloned = pNode.next;
     if(pNode.random!=null){
      pCloned.random = pNode.random.next; 
     }
     pNode = pCloned.next;
    }
   }
   //第三步,将第二步得到的链表拆分成两个链表
   public static RandomListNode splitNodes(RandomListNode head){
    RandomListNode pNode = head;
    RandomListNode clonedHead = null;
    RandomListNode clonedNode = null;
    if(pNode!=null){
     clonedHead = pNode.next;
     clonedNode = pNode.next;
     pNode.next = clonedNode.next;
     pNode = pNode.next;
    }
    while(pNode!=null){
     clonedNode.next = pNode.next;
     clonedNode = clonedNode.next;
     pNode.next = clonedNode.next;
     pNode = pNode.next;
    }
    return clonedHead;
   }
}
Nach dem Login kopieren

Zusammenfassung

Das obige ist der detaillierte Inhalt vonJava implementiert die gemeinsame Nutzung von Kopiercode für komplexe verknüpfte Listen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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