การลบองค์ประกอบนั้นง่ายมากในรายการที่เชื่อมโยง เราแค่ต้องกำจัดโหนดที่เราต้องการลบ นั่นคือ สูญเสียข้อมูลอ้างอิง มี 3 กรณีที่เราต้องพิจารณา -
- การลบองค์ประกอบออกจากส่วนหัว:ในกรณีนี้ เราสามารถกำหนด head =head.next และลบลิงก์ก่อนหน้าออกจากองค์ประกอบถัดไปได้ วิธีนี้จะทำให้สูญเสียการอ้างอิงขององค์ประกอบแรก และหัวออกจะเริ่มชี้ไปที่องค์ประกอบที่สอง
- การลบองค์ประกอบออกจากส่วนท้าย:ในกรณีนี้ เราสามารถกำหนด node.next ของโหนดสุดท้ายที่สองให้เป็น null และเราจะกำจัดองค์ประกอบสุดท้ายออกจากรายการ นอกจากนี้เรายังอัปเดตส่วนท้ายให้ชี้ไปที่โหนดปัจจุบันด้วย
- การลบองค์ประกอบออกจากระหว่าง:สิ่งนี้ยากกว่า ในกรณีนี้ เราจะต้องสร้างโหนดก่อนโหนดที่เราต้องการลบ เพื่อชี้ไปที่โหนดหลังโหนดที่เราต้องการลบโดยตรง ดังนั้น prevNode.next =node.next และ node.next.prev =prevNode จะทำสิ่งนี้ให้เรา
ทีนี้มาดูภาพประกอบของสิ่งนี้กัน −
ตอนนี้เรามาดูกันว่าเราจะใช้งานสิ่งนี้อย่างไร -
ตัวอย่าง
remove(data, position = 0) { if (this.length === 0) { console.log("List is already empty"); return; } this.length--; let currNode = this.head; if (position <= 0) { this.head = this.head.next; this.head.prev = null; } else if (position >= this.length - 1) { this.tail = this.tail.prev; this.tail.next = null; } else { let iter = 0; while (iter < position) { currNode = currNode.next; iter++; } currNode.next = currNode.next.next; currNode.next.prev = currNode; } return currNode; }
ตัวอย่าง
คุณสามารถทดสอบได้โดยใช้ −
let list = new LinkedList(); list.insert(10); list.insert(20); list.insert(30); list.remove(1); list.display(); list.insert(15, 2); list.remove(); list.display();
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
20 <-> 30 <-> 30 <-> 15 <->