1. 程式人生 > >《資料結構與演算法》之連結串列—有序連結串列

《資料結構與演算法》之連結串列—有序連結串列

2、有序連結串列

有序連結串列是在單鏈表的基礎上對單鏈表的表頭節點插入進行修改,從表頭開始根據插入值與連結串列中原先存在的資料節點進行比較判斷,若大於(或小於)該節點就向後移一個節點進行比較,直至不大於(或小於)該節點,最終實現按照從小到大(或從大到小)的順序排列連結串列。

// 插入節點,並按照從小到大的順序排列
	public void insert(int value) {
		Node node = new Node(value);
		Node previous = null;
		Node current = head;
		while (current != null && value > current.data) {
			previous = current;
			current = current.next;
		}
		if (previous == null) {
			head = node;
			head.next = current;
		} else {
			previous.next = node;
			node.next = current;
		}
	}
// 插入節點,並按照從大到小的順序排列
	public void insert(int value) {
		Node node = new Node(value);
		Node previous = null;
		Node current = head;
		while (current != null && value < current.data) {
			previous = current;
			current = current.next;
		}
		if (previous == null) {
			head = node;
			head.next = current;
		} else {
			previous.next = node;
			node.next = current;
		}
	}

另外,相對於有序陣列,連結串列的插入的速度比較快(因為元素不需要移動),同時連結串列可以擴充套件到全部有效的使用記憶體,而陣列則只能固定大小。 

在有序連結串列中插入和刪除某一項最多需要O(N)次比較,平均需要O(N/2)次,因為必須沿著連結串列上一步一步走才能找到正確的插入位置,然而有序連結串列可以最快速度刪除最小值或最大值,因為只需要刪除表頭即可,如果一個應用需要頻繁的存取最值,且不需要快速的插入,那麼有序連結串列是一個比較好的選擇方案。比如優先順序佇列可以使用有序連結串列來實現。