본문 바로가기

C#

C# 문법 -LinkedList의 구현

반응형

using System;
using System.Collections.Generic;
namespace ConsoleApp2
{
    class Node
    {
        internal int data;
        internal Node next;

        public Node(int data)
        {
            this.data = data;
            next = null;
        }

    }
         class LinkedList
        {
            Node head;
            internal void InsertFront(int data)
            {
                Node node = new Node(data);
                node.next = head;
                head = node;
            }
            internal void InsertLast(int data)
            {
                Node node = new Node(data);
                if (head == null)
                {
                    head = node;
                    return;
                }
                Node Lastnode = GetLastNode();
                Lastnode.next = node;
            }

            internal Node GetLastNode()
            {
                Node temp = head;
                while (temp.next != null)
                {
                    temp = temp.next;
                }
                return temp;

            }
            internal void InsertAfter(int prev, int data)
            {
                Node PrevNode = null;
                //find prev
                for (Node temp = head; temp != null; temp = temp.next)
                {
                    if (temp.data == prev)
                    {
                        PrevNode = temp;
                    }
                }
                if (PrevNode == null)
                {
                    Console.WriteLine("{0}data is not int the list");
                    return;
                }
                Node node = new Node(data);
                node.next = PrevNode.next;
                PrevNode.next = node;
            }
            //key 값을 저장하고 있는 노드 삭제하기 
            internal void DeletNode(int Key)
            {
                Node temp = head;
                Node prev = null;
                if (temp != null && temp.data == Key)
                {

                    head = temp.next;
                    return;
                }
                while (temp != null && temp.data != Key)
                {
                    prev = temp;
                    temp = temp.next;
                }
                if (temp == null)
                {
                    return;
                }
                prev.next = temp.next;
            }
            internal void Reverse()
            {
                Node prev = null;
                Node current = head;
                Node temp = null;
                while (current != null)
                {
                    temp = current.next;
                    current.next = prev;
                    prev = current;
                    current = temp;
                }
                head = prev;
            }
            internal void Print()
            {
                for (Node node = head; node != null; node = node.next)
                {
                    Console.Write(node.data + "->");
                }
                Console.WriteLine();
            }
        }
    
}

혼자 해보라면 못할거 같다 너무 어렵다!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            LinkedList list = new LinkedList();
            Random random = new Random();
            for (int i = 0; i < 5; i++)
            {
                list.InsertLast(random.Next(100));
            }
            Console.WriteLine("렌덤함 5개의 값의 리스트입니다.");
            list.Print();
            Console.WriteLine(" 만앞에 숫자삽입,맨뒤에 숫자삽입. <Enter>입력하세요 ");
            
            list.InsertFront(int.Parse(Console.ReadLine()));
            list.InsertLast(int.Parse(Console.ReadLine()));
            list.Print();
            Console.WriteLine("\n x노드 뒤에 y값을저장하려고 합니다.");
            Console.Write("x값을 입력하세요");
            int x = int.Parse(Console.ReadLine());
            Console.Write("y값을 입력하세요");
            int y = int.Parse(Console.ReadLine());
            list.InsertAfter(x, y);
            list.Print();
            Console.WriteLine("삭제할 노드의 값을 입력하세요");
            int z = int.Parse(Console.ReadLine());
            list.DeletNode(z);
            list.Print();
            Console.WriteLine("리스트를 뒤집어서 출력.<Enter>입력하세요");
            Console.ReadLine();
            list.Reverse();
            list.Print();
        }


    }

    
}

반응형