728x90
- Linked list란?
-> 노드를 이용 하여 데이터를 순차적으로 저장하는 구조.
링크드 리스트는 노드들의 연결로 구성되며, 각 노드는 데이터와 포인터로 이루어져 있습니다.
노드의 데이터 부분은 데이터를 저장하며 포인터 부분은 그 다음 노드의 주소를 가리키게 됩니다.
노드 구조
struct NODE { // 연결 리스트의 노드 구조체or클래스
struct NODE *next; // 다음 노드의 주소를 저장할 포인터
int data; // 데이터를 저장하는 변수
};
노드 생성
void AppendNode(Node** Head, Node* NewNode)
{
if( (*Head) == NULL ) //(*Head)가 NULL이란 말은 LinkedList가 안만들어 졌다는 것
{
*Head = NewNode; //즉 새로운 노드가 Head
}
else
{
Node* Tail = (*Head);
while(Tail->NextNode != NULL) //Tail노드 찾기
{
Tail = Tail->NextNode;
}
Tail->NextNode = NewNode; // Tail노드 찾으면 다음 노드를 newNode로 변경
}
}
노드 삭제
void RemoveNode(Node **Head, Node* Remove)
{
if(*Head == Remove)
{
*Head = Remove->NextNode;
}
else
{
//노드 탐색 부분
Node* Current = *Head;
while( Current != NULL && Current->NextNode != Remove )
{
Current = Current->NextNode;
}
if(Current != NULL)
{
//제거할 노드의 NextNode를 그 앞의 노드의 NextNode로 바꾼다.
Current->NextNode = Remove->NextNode;
}
}
}
노드 삽입 (이미 생성된 노드들 사이에 끼워넣기)
void InsertNode(Node* Current, Node* NewNode)
{
NewNode->NextNode = Current->NextNode;
Current->NextNode = NewNode;
}
노드 출력
void printList(nodeType *head) {
nodeType *ptr = head;
while(ptr != NULL) {
printf("%d\n", ptr->v);
ptr = ptr->next;
}
}
노드 탐색
Node* GetNodeLocation(Node* Head, int Location)
{
Node* Current = Head;
while(Current != NULL && (--Location) >= 0)
{
Current = Current->NextNode;
}
}
참고 링크 : domaindeveloper.tistory.com/21
댓글