Xóa một phần tử trong danh sách liên kết rất dễ dàng. Chúng ta chỉ cần loại bỏ nút mà chúng ta muốn loại bỏ, tức là làm mất tham chiếu của nó. Có 3 trường hợp chúng ta cần xem xét -
- Xóa một phần tử khỏi head:Trong trường hợp này, chúng ta chỉ cần gán head =head.next và xóa liên kết trước đó khỏi phần tử tiếp theo. Bằng cách này, chúng ta sẽ mất tham chiếu của phần tử đầu tiên. Và out head sẽ bắt đầu trỏ đến phần tử thứ hai.
- Xóa một phần tử khỏi đuôi:Trong trường hợp này, chúng ta có thể chỉ cần gán node.next của nút cuối cùng thứ hai là null và chúng ta sẽ loại bỏ phần tử cuối cùng khỏi danh sách. Chúng tôi cũng cập nhật phần đuôi để trỏ đến một nút hiện tại.
- Loại bỏ một phần tử ở giữa:Điều này phức tạp hơn. Trong trường hợp này, chúng ta sẽ phải tạo nút trước nút mà chúng ta muốn xóa, để trỏ trực tiếp đến nút sau nút mà chúng ta muốn xóa. Vì vậy, presNode.next =node.next và node.next.prev =prevNode sẽ thực hiện việc này cho chúng tôi.
Bây giờ chúng ta hãy xem một minh họa về điều này -
Bây giờ chúng ta hãy xem cách chúng tôi sẽ triển khai điều này -
Ví dụ
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; }
Ví dụ
Bạn có thể kiểm tra điều này bằng cách sử dụng -
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();
Đầu ra
Điều này sẽ cung cấp đầu ra -
20 <-> 30 <-> 30 <-> 15 <->