// 노드 삭제 public void Remove(DCLNode <T> n) { if (isEmpty) { //Console.WriteLine("삭제할 노드가 없습니다"); Debug.Log("삭제할 노드가 없습니다"); return; } --Length; // 삭제할 노드가 tail인 경우 if (n == tail) { tail = tail.Remove().prev; return; } for (DCLNode <T> node = tail.next; node != tail; node = node.next) { if (n == node) { node.Remove(); return; } } }
// 동서남북에 있는 탑다운카메라리그를 리스트에 넣어줌 private void ListSetUp() { Transform[] transforms = GetComponentsInChildren <Transform>(); camList = new DoublyCircularLinkedList <Transform>(); for (int i = 1; i < transforms.Length; ++i) { camList.Add(transforms[i]); } iter = camList.front; }
// 인덱스 위치에 삽입 public void Insert(T _data, int index) { ++Length; if (null == tail) { tail = new DCLNode <T>(_data); return; } Find(index).InsertNext(new DCLNode <T>(_data)); }
// 리스트 마지막에 노드 삽입 public void Add(T _data) { ++Length; if (null == tail) { tail = new DCLNode <T>(_data); return; } tail = tail.InsertNext(new DCLNode <T>(_data)); }
// 노드 뒤에 삽입 public DCLNode <T> InsertNext(DCLNode <T> node) { if (null != node) { node.prev = this; node.next = next; next.prev = node; next = node; } return(node); }
IEnumerator IEnumerable.GetEnumerator() { if (current == null) { current = front; } do { yield return(current.data); current = current.next; } while (current != front); }
// 노드 출력 public void Display() { if (null == tail) { //Console.WriteLine("리스트가 비어있습니다!"); Debug.Log("리스트가 비어있습니다!"); return; } DCLNode <T> n = tail.next; for (int i = 0; i < Length; ++i, n = n.next) { //Console.Write(i + "번지 원소 : "); Debug.Log(i + "번지 원소 : "); n.Display(); } //Console.WriteLine("Tail : " + tail.data); Debug.Log("Tail : " + tail.data); }
// 해당 인덱스 노드 찾기 public DCLNode <T> Find(int index) { // 인덱스 범위 벗어날 경우 if (0 > index || index >= Length) { //Console.WriteLine("해당 번지의 노드는 존재하지 않습니다"); Debug.Log("해당 번지의 노드는 존재하지 않습니다"); return(null); } // 해당 인덱스 노드 탐색 DCLNode <T> node = tail.next; while (0 != index) { --index; node = node.next; } return(node); }
public void Next() { iter = iter.next; }
public void Prev() { iter = iter.prev; }
public void Reset() { current = tail; }