ホームページ > Java > &#&チュートリアル > Java は複雑なリンク リストのコピー コード共有を実装します

Java は複雑なリンク リストのコピー コード共有を実装します

黄舟
リリース: 2017-10-17 10:06:15
オリジナル
1449 人が閲覧しました

この記事では主に Java のインタビューの質問を紹介します。複雑なリンク リストを実装するためのコピー コードを共有することは、非常に優れており、必要な友人が学ぶことができると考えています。

Alibaba のオンライン プログラミングの最後の質問、書き留めてみんなと共有してください

一方向のリンク リストがあり、各ノードにはこのリンク リスト内のノードまたは空のノードを指すランダム ポインタが含まれており、ディープ コピー関数を作成します, ランダム ポインターを含むリンク リスト全体をコピーします。可能な限り例外を考慮してください。

アルゴリズムは次のとおりです:


/*
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;
   }
}
ログイン後にコピー

概要

以上がJava は複雑なリンク リストのコピー コード共有を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート