Java
 Computer >> コンピューター >  >> プログラミング >> Java

リンクリストをJavaの別の位置にある別のリンクリストにマージします


リンクリストとして2つのデータ構造が与えられます。たとえば、List_1とList_2です。タスクは、リンクリスト「List_2」の要素を別の位置でリンクリスト「List_1」にマージすることです。「List_1」にマージできない要素が残っている場合は、「」として出力されます。 List_2の残りの要素。

例-:

List_1 =

リンクリストをJavaの別の位置にある別のリンクリストにマージします

List_2 =

リンクリストをJavaの別の位置にある別のリンクリストにマージします

アウト −マージされたリストは-:

リンクリストをJavaの別の位置にある別のリンクリストにマージします

説明 −2つのリスト(List_1とList_2)が与えられます。 list_2の可能な要素を別の位置でList_1にマージしました。したがって、List_1でマージした後の要素は、10-> 3-> 2-> 1-> 1-> 4-> 2-> 5-> 5であり、List_2では7->2です。

List_1 =11-> 12-> 13

List_2 =14-> 15-> 16-> 17-> 18

アウト −マージされたリストは-:11-> 14-> 12-> 15-> 13

説明 -List_1とList_2の2つのリストがあります。 list_2の可能な要素を別の位置でList_1にマージしました。したがって、List_1にマージした後の要素は11-> 14-> 12-> 15-> 13であり、List_2の要素は16->17->18です。

以下のプログラムで使用されるアプローチは次のとおりです-

  • リンクリストの最初のノードを指すヘッドノードを作成します。

  • Nodeのクラスを作成して、データメンバーとして値とnextを持つリンクリストを作成します。デフォルトのコンストラクターをNode(int val)として定義し、値をvalとして設定し、nextをNULLとして設定します。

  • add(int updated_value)のメソッド内で、リンクリストに要素を追加します。

    • オブジェクトをnew_nodeとして作成し、updated_valueをデフォルトのコンストラクターに渡します。

    • new_node.nextをheadに設定し、headをnew_nodeに設定します

  • mergeList(TutorialPoint list)の関数内

    • オブジェクトをn1_currとして作成し、headに設定し、n2_currをlist.headに設定します

    • n1_nextおよびn2_nextとしてオブジェクトを作成します

    • n1_curr!=null AND n2_curr!=nullとして起動します。 Whileの内部では、n1_nextをn1_curr.nextに、n2_nextをn2_curr.nextに、n2_curr.nextをn1_nextに、n1_curr.nextをn2_currに、n1_currをn1_nextに、n2_currをn2_nextに設定します

    • list.headをn2_currに設定します

  • main()メソッド内

    • 新しいTutorialPoint()へのTutorialPoint list_1および新しいTutorialPoint()へのTutorialPointlist_2としてオブジェクトを作成します

    • list_1.add(13)、list_1.add(12)、list_1.add(11)としてlist_1に要素を追加します。

    • list_2.add(18)、list_2.add(17)、list_2.add(16)、list_2.add(15)、list_2.add(14)としてlist_2に要素を追加します

    • mergeListメソッドを呼び出して、list_2の要素をlist_1.mergeList(list_2)

      としてlist_1にマージします。
    • 最終的なリストを出力として印刷します。

public class TutorialPoint{
   Node head;
   class Node{
      int value;
      Node next;
      Node(int val){
         value = val;
         next = null;
      }
   }
   void add(int updated_value){
      Node new_node = new Node(updated_value);
      new_node.next = head;
      head = new_node;
   }
   void mergeList(TutorialPoint list){
      Node n1_curr = head, n2_curr = list.head;
      Node n1_next, n2_next;

      while (n1_curr != null && n2_curr != null){
         n1_next = n1_curr.next;
         n2_next = n2_curr.next;

         n2_curr.next = n1_next;
         n1_curr.next = n2_curr;

         n1_curr = n1_next;
         n2_curr = n2_next;
      }
      list.head = n2_curr;
   }
   public static void main(String args[]){
      TutorialPoint list_1 = new TutorialPoint();
      TutorialPoint list_2 = new TutorialPoint();
      list_1.add(13);
      list_1.add(12);
      list_1.add(11);
      list_2.add(18);
      list_2.add(17);
      list_2.add(16);
      list_2.add(15);
      list_2.add(14);
      list_1.mergeList(list_2);
      System.out.println("Merged list is:");
      Node temp = list_1.head;
      while (temp != null){
         System.out.print(temp.value + " ");
         temp = temp.next;
      }
      System.out.println();
   }
}

出力

上記のコードを実行すると、次の出力が生成されます

Merged list is:
11 14 12 15 13 16

  1. リンクリストの代替ノードの積

    n個のノードがある場合、タスクはリンクリスト内の代替ノードの積を出力することです。プログラムは、ノードの場所を実際に変更せずに、代替ノードの製品のみを印刷する必要があります。 例 Input -: 10 20 30 40 50 60 Output -: 15000 上記の例では、10個の代替ノードである最初のノードから開始すると10、30、50であり、それらの積は10 * 30 * 50=15000です。 上の図では、最初のノードから開始し、赤色のノードが重要ではないノードである場合、青色のノードが代替ノードです。 以下で使用するアプローチは次のとおりです 一時的なポインタを取

  2. C++のリンクリストの代替ノードの合計

    この問題では、リンクリストが表示されます。私たちのタスクは、リンクリストの代替ノードの合計を出力することです。 リンクリストは、リンクを介して相互に接続された一連のデータ構造です。 では、問題に戻りましょう。ここでは、リンクリストの代替ノードを追加します。これは、ノードが位置0、2、4、6、…であることを追加することを意味します 問題を理解するために例を見てみましょう。 入力 4 → 12 → 10 → 76 → 9 → 26 → 1 出力 24 説明 considering alternate strings