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

การแทรกองค์ประกอบลงในรายการที่เชื่อมโยงเป็นสองเท่าโดยใช้ Javascript


เราจำเป็นต้องสร้างฟังก์ชัน insert(data, position) ที่แทรกข้อมูลที่ตำแหน่งที่กำหนดในรายการที่เชื่อมโยง เราจะดำเนินการตามขั้นตอนต่อไปนี้ -

  • สร้างโหนดใหม่
  • ตรวจสอบว่ารายการว่างเปล่าหรือไม่ ถ้ามันเพิ่มโหนดไปที่หัวและท้ายแล้วกลับ
  • ถ้าไม่ใช่ เราจะวนซ้ำไปยังตำแหน่งที่เราต้องการแทรกโดยใช้ currElem เราทำซ้ำรายการที่เชื่อมโยงโดยทำให้ currElem เท่ากับ currElem.next

ตอนนี้เราเปลี่ยนลิงค์ด้วยวิธีต่อไปนี้ -

  • สร้างโหนดใหม่ให้ชี้ไปที่โหนดถัดไปในรายการ
  • กำหนดจุดก่อนหน้าของโหนดถัดไปไปยังโหนดใหม่
  • ทำให้โหนดของเราชี้ไปที่โหนดก่อนหน้า
  • ทำให้โหนดก่อนหน้าเป็นจุดถัดไปไปยังโหนดใหม่

สุดท้าย เราแยกลิงก์จาก currElem ไปยังส่วนที่เหลือของรายการ และกำหนดให้ชี้ไปที่โหนดที่เราสร้างขึ้น ตอนนี้โหนดอยู่ในรายการที่ตำแหน่งที่กำหนด

นี่คือภาพประกอบของสิ่งเดียวกัน -

การแทรกองค์ประกอบลงในรายการที่เชื่อมโยงเป็นสองเท่าโดยใช้ Javascript

ตอนนี้เรามาดูกันว่าเราจะใช้สิ่งนี้อย่างไร -

ตัวอย่าง

insert(data, position = this.length) {
   let node = new this.Node(data);
   this.length++;
   // List is currently empty
   if (this.head === null) {
      this.head = node;
      this.tail = node;
      return this.head;
   }
   // Insertion at head
   if (position == 0) {
      node.prev = null;
      node.next = this.head;
      this.head.prev = node;
      this.head = node;
      return this.head;
   }
   let iter = 1;
   let currNode = this.head;
   while (currNode.next != null && iter < position) {
      currNode = currNode.next;
      iter++;
   }
   // Make new node point to next node in list
   node.next = currNode.next;
   // Make next node's previous point to new node
   if (currNode.next != null) {
      currNode.next.prev = node;
   }
   // Make our node point to previous node
   node.prev = currNode;
   // Make previous node's next point to new node
   currNode.next = node;
   // check if inserted element was at the tail, if yes then make tail point to it
   if (this.tail.next != null) {
      this.tail = this.tail.next;
    }
    return node;
}

โปรดทราบว่าเราได้กำหนดตำแหน่งเป็นองค์ประกอบสุดท้าย เนื่องจากถ้าคุณไม่ระบุตำแหน่ง ตำแหน่งนั้นจะถูกแทรกที่ส่วนท้ายตามค่าเริ่มต้น

คุณสามารถทดสอบสิ่งนี้ได้โดยใช้:

ตัวอย่าง

let list = new LinkedList();
list.insert(10);
list.insert(20);
list.insert(30);
list.insert(15, 2);
list.display();

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ -

10 <->
30 <->
15 <->
20 <->

ดังที่เราเห็นองค์ประกอบทั้งหมดอยู่ในลำดับที่เราตั้งใจไว้ เราลองใส่ 15 ที่ตำแหน่งหลัง 2