Double Linked List 시작부분에 데이터 입력하기 (InsertAtHead)

Jaden·2023년 5월 1일
0

이중연결리스트 head에 삽입하기

Struct Node_{
	int data;
	struct Node_* prev;
	Struct Node_* next;
}
typedef Struct Node_ Node;

Node* head;

int main(){
	head = NULL;
	InsertAtHead(2);
	InsertAtHead(4);
	InsertAtHead(6);
	
}

void InsertAtHead(int x){
	Node* tmp = (Node*)malloc(sizeOf(Node));
	tmp -> data = x;
	tmp -> prev = NULL;
	tmp -> next = NULL;
	
	if(head == NULL){
		head = tmp;
		return;
	}
	head -> prev = tmp;
	tmp -> next = head;
	head = tmp;
}

여기서 insertAtHead 내부의

	Node* tmp = (Node*)malloc(sizeOf(Node));
	tmp -> data = x;
	tmp -> prev = NULL;
	tmp -> next = NULL;

malloc으로 node pointer타입의 변수를 선언하고, data, prev, next를 할당해주는 부분은 GetNewNode라는 함수로 빼내기로 한다.


void GetNewNode(int x){
	Node* newNode = (Node*)malloc(sizeOf(Node));
	newNode -> data = x;
	newNode -> prev = NULL;
	newNode -> next = NULL;

	return newNode;	
}
void InsertAtHead(int x){
	Node* tmp = GetNewNode(x);
	if(head == NULL){
		head = tmp;
		return;
	}
	head -> prev = tmp;
	tmp -> next = head;
	head = tmp;
}

즉, 위와 같은 형태로 바뀐다.


이제 insertAtHead가 어떻게 동작하는지 알아보자. 먼저 main이다.
int main(){
	head = NULL;
	InsertAtHead(2);
}

한 라인씩 보자.

//main
	head = NULL;

//main
	InsertAtHead(2);

insertAtHead함수에 파라미터 2를 준다.


이제 insertAtHead 함수를 자세히 살펴보자.

void InsertAtHead(int x){
	Node* tmp = GetNewNode(x);
	if(head == NULL){
		head = tmp;
		return;
	}
	head -> prev = tmp;
	tmp -> next = head;
	head = tmp;
}

한 라인씩 차근차근 설명하려 한다.

//InsertAtHead function
	Node* tmp = GetNewNode(2);


//InsertAtHead function
	if(head == NULL){
		head = tmp;
		return;
	}

head가 null을 가리키고 있으므로 If문에 진입한다.

head가 tmp를 가리키고 return하며 InsertAtHead함수를 빠져나온 결과는 다음과 같다.


//insertAtHead function
	head -> prev = tmp;
	tmp -> next = head;
	head = tmp;

0개의 댓글