//Linked List 구조
#include <iostream>
using namespace std;
struct Node //노드 구조
{
int val;
Node * next;
};
class Iterator //순회자 클래스
{
public:
Node * CurrentNode;
void Next() //다음으로 이동
{
CurrentNode = CurrentNode->next;
}
int PointVal() //가리키는 값
{
return CurrentNode->val;
}
bool Compare(Iterator diffIter) //노드 비교
{
// return CurrentNode != diffIt.CurrentNode;
if (CurrentNode != diffIter.CurrentNode)
return true;
return false;
}
};
class List //리스트 생성
{
public:
Node head;
Node tail;
int num;
void Default() //노드 초기화
{
head.next = &tail;
num = 0;
}
void Add(int order, int val) //노드 추가하기
{
//0. 이전 노드로 이동
Node * PrevNode = &head;
for (int i = 1; i < order; i++)
{
PrevNode = PrevNode->next;
}
//1. 새 노드 준비
Node * NewNode = new Node;
NewNode->val = val;
//2. 연결
NewNode->next = PrevNode->next;
PrevNode->next = NewNode;
//
num++;
}
void Delete(int order) //노드 삭제
{
//0. 이전 노드로 이동
Node * PrevNode = &head;
for (int i = 1; i < order; i++)
{
PrevNode = PrevNode->next;
}
//1. 삭제할 노드 기억
Node * DeleteNode = PrevNode->next;
//2. 연결
PrevNode->next = PrevNode->next->next;
//3. 삭제
delete DeleteNode;
//
num--;
}
int Read(int order) //노드 읽기
{
//0. 해당 순서의 노드로 이동
Node * CurrentNode = &head;
for (int i = 1; i <= order; i++)
{
CurrentNode = CurrentNode->next;
}
return CurrentNode->val;
}
int Number() { return num; } //노드 갯수
Iterator Begin() //시작 순회자
{
Iterator BeginIter;
BeginIter.CurrentNode = head.next;
return BeginIter;
}
Iterator End() //마지막 순회자
{
Iterator EndIter;
EndIter.CurrentNode = &tail;
return EndIter;
}
};
void main()
{
List list1;
list1.Default();
list1.Add(1, 1);
list1.Add(2, 2);
list1.Add(1, 3);
for (Iterator iter = list1.Begin(); iter.Compare(list1.End()); iter.Next()) //해당 순회자가 만나는 지점까지 반복
{
cout << iter.PointVal() << endl;
}
}