본문 바로가기
자료구조&알고리즘/자료구조

Linked list

by El_Pong 2020. 12. 23.
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

댓글