14 Kasım 2017 Salı

Gömülü Proje Linked List

Constructor
List head ve tail için null veya boş node'lar kullanabilir.
private final Node<T> head = new Node<>(null);
private final Node<T> tail = new Node<>(null);
private int size = 0;

public List() {
  head.right = tail;
  tail.left  = head;
}
GetFirst metodu
Şöyle yaparız
Node* rest(){
  Node* nextToHead = head -> right; 
  return nextToHead;
}
GetHead metodu
Şöyle yaparız
Node* pNode = list.GetHead ();
int listSize = list.Size ();
for (int index = 0; index < listSize; index++) {
  MyData* pData = pNode->GetData ();
  if (pData->IsValid ()){
    //...Do something
    pNodex = list.GetNext (pNode);
  }
  else {
    Node* pTemp = pNode;
    pNode = list.GetNext (pNode);
    list.Delete (pTemp);
  }
}
GetHead metodu - Node
Şöyle yaparız.
public static <E> Node<E> GetHead(Node<E> current) {
  Node<E> head = null;
  while (current != null) {
    head = current;
    current = current.left;
  }
  return head;
}
Iterator
C++'taki gibi iterator kullanılmasa bile veriyapısını yöneten sınıfa iteration metodlarını koymak doğru olmaz. Mümkünse ayrı bir iterator sınıfı yazmak daha iyi.

Hiç yorum yok:

Yorum Gönder