リストを表現するためのデータ構造の一つである.「自身のデータ」以外に「別のデータへの参照を保存するフィールド」を持っている.
挿入や削除では配列よりも優れている.なぜなら,配列によるリストに新たなデータを挿入する場合は,それ以降の要素をすべてずらす必要があるが,連結リストでは参照する要素の付け替えだけで済むからだ
しかし,探索では配列の二分探索に負ける.
連結リストは以下のコードのように実装することができる.次の要素を指し示す多面は余分な領域が必要である.
class MyLinkedData{
String key;
String data;
MyLinkedData next;
};
MyLinkedData p = header;
while(p!=null){
System.out.println("" + p);
p = p.next;
}
リストの先頭(head)と末尾(tail)に特殊なデータを置く.
双方向リストは以下のコードのように実装することができる.次の要素を指し示す多面は余分な領域が必要である.
class MyDoublyLinkedData{
private String key;
private String data;
MyDoublyLinkedData prev;
MyDoublyLinkedData next;
}
p.prev.next = n;
n.prev = p.prev;
n.next = p;
p.prev = n;
p.prev.next = n;
n.prev = p.prev;
n.next = p;
p.prev = n;
p.prev.next = p.next;
p.next.prev = p.prev;
p.prev.next = p.next; // p.prev.next = null; と同義
if(p.next!=null){
p.next.prev = p.prev;
}