Ejemplo n.º 1
0
        public void Remove(SingleLinkedListNode <T> removeNode)
        {
            if (head == null || removeNode == null)
            {
                return;
            }

            // 삭제할 노드가 첫 노드면
            if (removeNode == head)
            {
                head       = head.Next;
                removeNode = null;
            }
            else
            {
                var current = head;

                // 단방향이므로 삭제할 노드의 바로 이전 노드를 검색해야 함

                while (current != null && current.Next != removeNode)
                {
                    current = current.Next;
                }

                if (current != null)
                {
                    // 이전 노드의 Next에 삭제노드의 Next를 할당
                    current.Next = removeNode.Next;
                    removeNode   = null;
                }
            }
        }
Ejemplo n.º 2
0
        // CurrentNode - NextNode => CurrentNode - NewNode - NextNode로 변환
        public void AddAfter(SingleLinkedListNode <T> current, SingleLinkedListNode <T> newNode)
        {
            if (head == null || current == null || newNode == null)
            {
                throw new InvalidOperationException();
            }

            newNode.Next = current.Next;
            current.Next = newNode;
        }
Ejemplo n.º 3
0
        // 새 노드를 추가하는 Add() 매서드
        public void Add(SingleLinkedListNode <T> newNode)
        {
            // 리스트가 비어있다면...
            if (head == null)
            {
                head = newNode;
            }
            else
            {
                var current = head;

                while (current != null && current.Next != null)
                {
                    current = current.Next;
                }

                current.Next = newNode;
            }
        }
Ejemplo n.º 4
0
 public SingleLinkedListNode(T data)
 {
     this.Data = data;
     this.Next = null;
 }