溫馨提示×

Java有序雙向鏈表怎么實現

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

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

  1. 定義一個節點類,包含三個屬性:前一個節點的引用、節點的值和后一個節點的引用。
class Node {
    Node prev;
    int value;
    Node next;
}
  1. 定義一個有序雙向鏈表類,包含兩個屬性:鏈表的頭節點和鏈表的尾節點。
class SortedDoublyLinkedList {
    Node head;
    Node tail;
}
  1. 實現有序雙向鏈表類的插入方法,用于將一個元素按照順序插入到鏈表中。首先判斷鏈表是否為空,如果為空,則將新節點作為頭節點和尾節點。如果不為空,則從頭節點開始遍歷鏈表,找到合適的位置插入新節點。
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. 實現有序雙向鏈表類的刪除方法,用于刪除指定值的節點。首先判斷鏈表是否為空,如果為空,則直接返回。如果不為空,則從頭節點開始遍歷鏈表,找到第一個值等于指定值的節點,并刪除它。
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;
    }
}

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

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女