Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

รวมลิงค์ลิสต์เข้ากับลิงค์ลิสต์อื่นที่ตำแหน่งอื่นใน Java


เราได้รับโครงสร้างข้อมูลสองโครงสร้างเป็นรายการที่เชื่อมโยง สมมติว่า List_1 และ List_2 ภารกิจคือการรวมองค์ประกอบของรายการที่เชื่อมโยง 'List_2' เข้ากับรายการที่เชื่อมโยง 'List_1' ที่ตำแหน่งอื่น และหากเราเหลือองค์ประกอบที่ไม่สามารถรวมเป็น 'List_1' ได้ องค์ประกอบนั้นจะถูกพิมพ์เป็น ' List_2' องค์ประกอบที่เหลืออยู่

ตัวอย่าง-:

ใน

List_1 =

รวมลิงค์ลิสต์เข้ากับลิงค์ลิสต์อื่นที่ตำแหน่งอื่นใน Java

List_2 =

รวมลิงค์ลิสต์เข้ากับลิงค์ลิสต์อื่นที่ตำแหน่งอื่นใน Java

ออก − รายชื่อที่ผสานคือ-:

รวมลิงค์ลิสต์เข้ากับลิงค์ลิสต์อื่นที่ตำแหน่งอื่นใน Java

คำอธิบาย − เราได้รับสองรายการคือ 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 เพื่อสร้างรายการเชื่อมโยงซึ่งจะมีค่าและต่อไปเป็นสมาชิกข้อมูล กำหนดคอนสตรัคเตอร์เริ่มต้นเป็น Node(int val) และตั้งค่าเป็น val และถัดไปเป็น NULL

  • ภายในวิธีการใน add(int updated_value) เพื่อเพิ่มองค์ประกอบในรายการที่เชื่อมโยง

    • สร้างวัตถุเป็น new_node และส่ง updated_value ไปยังตัวสร้างเริ่มต้น

    • ตั้งค่า new_node.next เป็น head และไปที่ new_node

  • ภายในฟังก์ชันใน mergeList(รายการ TutorialPoint)

    • สร้างวัตถุเป็น n1_curr และตั้งค่าเป็น head และ n2_curr เป็น list.head

    • สร้างวัตถุเป็น n1_next และ n2_next

    • เริ่มในขณะที่ 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_ncurr ถึง n2

    • ตั้งค่า list.head เป็น n2_curr

  • ภายในเมธอด main()

    • สร้างวัตถุเป็น TutorialPoint list_1 ให้กับ TutorialPoint() และ TutorialPoint list_2 ใหม่เป็น 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