在 Java 中將一個連結串列合併到另一個連結串列的交替位置


我們得到兩個資料結構作為連結串列,假設為 List_1 和 List_2。任務是將連結串列“List_2”的元素合併到連結串列“List_1”的交替位置,如果我們剩下無法合併到“List_1”的元素,則將其列印為“List_2”的剩餘元素。

例如-

輸入

List_1 =

List_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。我們將 List_2 的可能元素合併到 List_1 的交替位置。因此,合併後 List_1 中的元素為 11 - > 14 -> 12 -> 15 -> 13,List_2 中的元素為 16->17->18。

下面程式中使用的方案如下:

  • 建立一個頭節點,它將指向連結串列的第一個節點。

  • 建立一個 Node 類來建立連結串列,它將具有 value 和 next 作為資料成員。定義一個預設建構函式作為 Node(int val),並將 value 設定為 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

    • 啟動 While 迴圈,條件為 n1_curr != null 且 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 list_1,指向 new TutorialPoint(),以及 TutorialPoint list_2,指向 new TutorialPoint()

    • 向 list_1 新增元素,如 list_1.add(13)、list_1.add(12) 和 list_1.add(11)。

    • 向 list_2 新增元素,如 list_2.add(18)、list_2.add(17)、list_2.add(16)、list_2.add(15) 和 list_2.add(14)

    • 呼叫 mergeList 方法將 list_2 的元素合併到 list_1,如 list_1.mergeList(list_2)

    • 列印最終列表作為輸出。

示例

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

更新於: 2021-10-22

546 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告