포도가게의 개발일지
연결리스트(1)add_first 함수 이해 본문
#include
#include
struct node{
int data;
struct node *next;
};
void addFirst(struct node *head1, int data) // head1 head노드의 주소값
{
struct node *newNode = malloc(sizeof(struct node));
newNode->next = head1->next; //1번 2번노드 연결되어잇을때 1.5번노드를 사이에 넣어주기위해 1번노드에 저장되있던2번주소를 1.5번에 넣어줌
head1->next = newNode;//1.5번주소를 1번 next에 넣어줌
newNode->data = data;//1.5번 data 입력
}
int main(void)
{
struct node *head = malloc(sizeof(struct node));
head->next = NULL;
addFirst(head,10); // data 순서 0(head) 10
addFirst(head,20); // 0 20 10
addFirst(head,30); // 0 30 20 10
struct node *target = head->next;
while(target != NULL)
{
printf("1:%d\n",target->data);
struct node *temp = target->next; // 다음 노드의 헤드값을 임시저장 ex) 2->3번노드 일때 3번헤드값저장
free(target); // 현재 노드 메모리 할당 해제 ex) 2번 노드 메모리 해제
target = temp; // 3번노드 주소를 넣어줌으로써 3번 노드로 이동 그리고 반복
}
free(head);
return 0;
}
1.node를 이순서로 추가해 줄 경우 뒤에 오는 node들과의 연결이 끊어져 잃어버릴 수 있습니다. 때문에
새로 추가할 newNode->next에 원래 다음에 왔어야 할 node에 헤드값을 넣어줌으로써 연결된 리스트들을 잃어버리는 것을 방지할수 있습니다. 마지막으로
head->next에 새로 만들어진 newNode에 헤드값을 넣어 줌으로써 말 그대로 add_first 헤드 다음으로 오는 선행에 node들을 추가 할 수있습니다. 이와 반대로 마지막에 node들을 추가하는 함수도 있습니다. 아마 그 함수는 단지 마지막 노드에 다으 newnode의 헤드값을 넣고 newnode->next에 NULL처리만 하면 될 것 입니다.
'자료구조' 카테고리의 다른 글
위상정렬 & 백준 2252 줄세우기 (0) | 2021.08.20 |
---|---|
stack or queue로 구현한 (DFS & BFS ) (0) | 2021.08.10 |
Merge sort(병합 정렬) (0) | 2021.07.13 |
Quick Sort(퀵 정렬) (0) | 2021.07.09 |
연결 LIST (0) | 2021.06.24 |