เราจำเป็นต้องสร้างฟังก์ชัน insert(data, position) ที่แทรกข้อมูลที่ตำแหน่งที่กำหนดในรายการที่เชื่อมโยง เราจะดำเนินการตามขั้นตอนต่อไปนี้ -
- สร้างโหนดใหม่
- ตรวจสอบว่ารายการว่างเปล่าหรือไม่ ถ้ามันเพิ่มโหนดไปที่หัวและท้ายแล้วกลับ
- ถ้าไม่ใช่ เราจะวนซ้ำไปยังตำแหน่งที่เราต้องการแทรกโดยใช้ currElem เราทำซ้ำรายการที่เชื่อมโยงโดยทำให้ currElem เท่ากับ currElem.next
ตอนนี้เราเปลี่ยนลิงค์ด้วยวิธีต่อไปนี้ -
- สร้างโหนดใหม่ให้ชี้ไปที่โหนดถัดไปในรายการ
- กำหนดจุดก่อนหน้าของโหนดถัดไปไปยังโหนดใหม่
- ทำให้โหนดของเราชี้ไปที่โหนดก่อนหน้า
- ทำให้โหนดก่อนหน้าเป็นจุดถัดไปไปยังโหนดใหม่
สุดท้าย เราแยกลิงก์จาก currElem ไปยังส่วนที่เหลือของรายการ และกำหนดให้ชี้ไปที่โหนดที่เราสร้างขึ้น ตอนนี้โหนดอยู่ในรายการที่ตำแหน่งที่กำหนด
นี่คือภาพประกอบของสิ่งเดียวกัน -

ตอนนี้เรามาดูกันว่าเราจะใช้สิ่งนี้อย่างไร -
ตัวอย่าง
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