溫馨提示×

Java有序雙向鏈表怎么實現(xiàn)

小億
93
2023-11-16 09:37:22
欄目: 編程語言

要實現(xiàn)一個有序雙向鏈表,可以按照以下步驟進行:

  1. 定義一個節(jié)點類,包含三個屬性:前一個節(jié)點的引用、節(jié)點的值和后一個節(jié)點的引用。
class Node {
    Node prev;
    int value;
    Node next;
}
  1. 定義一個有序雙向鏈表類,包含兩個屬性:鏈表的頭節(jié)點和鏈表的尾節(jié)點。
class SortedDoublyLinkedList {
    Node head;
    Node tail;
}
  1. 實現(xiàn)有序雙向鏈表類的插入方法,用于將一個元素按照順序插入到鏈表中。首先判斷鏈表是否為空,如果為空,則將新節(jié)點作為頭節(jié)點和尾節(jié)點。如果不為空,則從頭節(jié)點開始遍歷鏈表,找到合適的位置插入新節(jié)點。
void insert(int value) {
    Node newNode = new Node();
    newNode.value = value;
    
    if (head == null) {
        head = newNode;
        tail = newNode;
    } else {
        Node current = head;
        while (current != null && current.value < value) {
            current = current.next;
        }
        
        if (current == head) {
            newNode.next = head;
            head.prev = newNode;
            head = newNode;
        } else if (current == null) {
            newNode.prev = tail;
            tail.next = newNode;
            tail = newNode;
        } else {
            newNode.prev = current.prev;
            newNode.next = current;
            current.prev.next = newNode;
            current.prev = newNode;
        }
    }
}
  1. 實現(xiàn)有序雙向鏈表類的刪除方法,用于刪除指定值的節(jié)點。首先判斷鏈表是否為空,如果為空,則直接返回。如果不為空,則從頭節(jié)點開始遍歷鏈表,找到第一個值等于指定值的節(jié)點,并刪除它。
void remove(int value) {
    if (head == null) {
        return;
    }
    
    Node current = head;
    while (current != null && current.value != value) {
        current = current.next;
    }
    
    if (current == head) {
        head = head.next;
        if (head != null) {
            head.prev = null;
        } else {
            tail = null;
        }
    } else if (current == tail) {
        tail = tail.prev;
        tail.next = null;
    } else {
        current.prev.next = current.next;
        current.next.prev = current.prev;
    }
}

這樣就可以實現(xiàn)一個基本的有序雙向鏈表,在插入和刪除節(jié)點時能夠保持鏈表的有序性。

0