Algorithm/Data Structure

4. LinkedList 구현하기

lee308812 2021. 2. 3. 22:58

[ 최종 구현(C#) ]

using System;
using System.Collections.Generic;

namespace Exercise
{
    class MyLinkedListNode<T>
    {
        public T Data { get; set; }
        public MyLinkedListNode<T> Prev = null;
        public MyLinkedListNode<T> Next = null;
    }

    class MyLinkedList<T>
    {
        MyLinkedListNode<T> Head = null;
        MyLinkedListNode<T> Tail = null;

        public int Count { get; set; }

        public MyLinkedListNode<T> AddLast(T item)
        {
            MyLinkedListNode<T> newNode = new MyLinkedListNode<T>() { Data = item };

            if (Head == null)
            {
                Head = newNode;
            }
            if (Tail != null)
            {
                Tail.Next = newNode;
                newNode.Prev = Tail;
            }

            Tail = newNode;
            Count++;

            return newNode;
        }

        public void RemoveAt(MyLinkedListNode<T> node)
        {
            if (node == Head) Head = node.Next;
            if (node == Tail) Tail = node.Prev;

            if(node.Prev != null)
            {
                node.Prev.Next = node.Next;
            }
            if(node.Next != null)
            {
                node.Next.Prev = node.Prev;
            }

            Count--;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyLinkedList<int> _data3 = new MyLinkedList<int>();
            MyLinkedListNode<int> node1 = _data3.AddLast(101);
            MyLinkedListNode<int> node2 = _data3.AddLast(102);
            MyLinkedListNode<int> node3 = _data3.AddLast(103);
            MyLinkedListNode<int> node4 = _data3.AddLast(104);
            MyLinkedListNode<int> node5 = _data3.AddLast(105);

            _data3.RemoveAt(node3);
            _data3.RemoveAt(node2);
            _data3.RemoveAt(node1);
            _data3.RemoveAt(node4);
            _data3.RemoveAt(node5);
        }
    }
}