public static bool IsCircular(DoublyLinkedListNode <T> head) { // 필터링 하면서 내려가면서 마지막까지 없으면 false if (head is null) { return(true); } var current = head; for ( ; current != null;) { current = current.Next; if (current == head) { return(true); } } return(false); }
public void Add(DoublyLinkedListNode <T> newNode) { if (_head is null) { _head = newNode; _head.Next = _head; _head.Prev = _head; } else { var current = _head; var tail = _head.Prev; // urrent.Next이 for문을 돌 때마다 // 1. 현재 값의 다음 값을 계속 불러온다. // 추가할 때 양 방향 연결 current.Prev = newNode; tail.Next = newNode; newNode.Prev = tail; newNode.Next = current; } }
public void Remove(DoublyLinkedListNode <T> removeNode) { if (_head is null || removeNode is null) { return; } if (removeNode == _head) { removeNode = _head.Next; if (_head != null) { _head.Prev = null; } } else { removeNode.Prev.Next = removeNode.Next; removeNode.Next.Prev = removeNode.Prev; } removeNode = null; }
public bool IsHeadNull(DoublyLinkedListNode <T> head) { return(_head is null); }