올바른 용어를 사용하길 바랍니다. 단일 체인 목록을 만들었습니다.단일 체인 목록 반전
class MyStack
{
public Node Initial { get; set; }
public MyStack()
{
Initial = null;
}
public void Push(int data)
{
var node = new Node { Data = data, Next = Initial };
Initial = node;
}
public int Pop()
{
int res = Initial.Data;
Initial = Initial.Next;
return res;
}
public int Sum()
{
int sum = 0;
Node currentNode = Initial;
while (currentNode != null)
{
sum += currentNode.Data;
currentNode = currentNode.Next;
}
return sum;
}
public int Count()
{
int count = 0;
Node currentNode = Initial;
while (currentNode != null)
{
count++;
currentNode = currentNode.Next;
}
return count;
}
public void PrintAll()
{
Node currentNode = Initial;
while(currentNode != null)
{
Console.WriteLine("tmp.Data = " + currentNode.Data);
currentNode = currentNode.Next;
}
}
}
public class Node
{
public int Data;
public Node Next;
}
이 같은 것을 할 수있는 의미 :
var s = new MyStack();
s.Push(5);
s.Push(3);
s.Push(7);
s.PrintAll();
Console.WriteLine("Sum: " + s.Sum());
Console.WriteLine("Count: " + s.Count());
는 지금, 나는 시도하고 역방향 방법을 만들고 싶어. 이것은 작동하는 것 같습니다 :
public void Reverse()
{
Node predesesor, location;
location = Initial;
predesesor = null;
while(Initial != null)
{
Initial = Initial.Next;
location.Next = predesesor;
predesesor = location;
location = Initial;
}
Initial = predesesor;
}
나는 그것이 어떻게 작동하는지 알 수없고 유지하기가 어려울 것입니다. 다른 것보다 더 해킹 된 것처럼 보입니다.
도움이 될 수 있습니까?
가 already있다public class Node
{
public int Data;
public Node Next;
public Node Previous;
}
는 당신이 프레임 워크의 이중 연결리스트를 원하는 경우 :
그런데, 밀지 않고 갑자기 튀어 나오려고한다면 어떻게 될까요? 거기에 수표를 넣으십시오. – erelender
그래, 나도 알아 :) 이것은 개인적인 운동이므로,이 것들이 어떻게 작동하는지 더 깊은 지식을 보관할 수 있습니다. 프로덕션 코드에서 사용하는 것이 아닙니다. – CasperT