반응형
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();
}
}
}
반응형
'C#' 카테고리의 다른 글
C# 문법 -STACK<T>구현 (0) | 2023.03.02 |
---|---|
C# 문법 -Queue<T>의 구현 (0) | 2023.03.02 |
C# 개발- 배열 /반복문/DATETIME으로 WINFORM UI 만들어 보기 (0) | 2023.03.02 |
C# 문법 - Int.TryParse(string s , out int result) 사용해보기 (0) | 2023.03.02 |
C# 문법- List<T>/ArrayList (0) | 2023.03.02 |
C# 기초 문법 -오버라이딩 /오버로딩/ 추상클래스,메서드/인터페이스-다중상속/ (0) | 2023.02.28 |