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;
}
즉, 위와 같은 형태로 바뀐다.
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;