본문으로 바로가기

실제로 면접보러 가서 손코딩 문제로 나왔던 문제 중 하나인 더블 링크드 리스트.

노드 추가, 삭제 하는 부분만 구현 하면 됬었어서 쉽다고 생각했었는데 

탐색하면서 원하는 위치 찾아서 뭔가 하는 부분의 while에서 조건문을 반대로 사용했던 기억이 난다. (그래서 이번에는 다른 방법으로 구현)


밀려있는 코딩 면접시험 끝내고 나서 시간나면 Python으로도 짜봐야겠다. 

Python이 확실히 코딩시험 치기에는 좋은 것 같은데, 

면접관들 중 특정 언어를 고집하는 사람도 많아서(뭐랄까, 약간, "바퀴를 만들어보세요!" 느낌이랄까) 

C로 짜본 후 간단히 구현할 수 있는 Python으로 한번 더 해보는게 좋을 것 같다.



typedef struct _node{
	int data;
	struct _node* next;
	struct _node* prev;
}node;

//--------- Global Variable --------- //
node* head;
node* tail; 
//--------- Global Variable --------- //

// Create new node for insert
node* createNewNode(int value) {
	node* newNode = (node*)malloc(sizeof(node));
	newNode->data = value;
	newNode->prev = NULL;
	newNode->next = NULL;
	return newNode;
}

// Insert new node at head of double linked list
void insertNewNodeAtHead(int value) {
	node* newNode = createNewNode(value);
	if(head == NULL)
	{
		head = newNode;
		return;
	}
	head->prev    = newNode;
	newNode->next = head; 
	head = newNode;
}

// Insert new node at tail of double linked list
void insertNewNodeAtTail(int value) {
	node* tempNode = head;
	node* newNode = createNewNode(value);
	if(head == NULL)
	{
		head = newNode;
		return;
	}
	while(tempNode->next != NULL) 
	{
		tempNode = tempNode->next;
	}
	tempNode->next = newNode;
	newNode->prev  = tempNode;
}

void deleteNode(int value )
{
	node* tempNode = head;
	while(tempNode->next != NULL) 
	{
		if(tempNode->data == value)
		{
			(tempNode->prev)->next = tempNode->next;
			(tempNode->next)->prev = tempNode->prev;
			free(tempNode);
			return;
		}
		tempNode = tempNode->next;
	}
}

void printDoubleLinkedList() {
	node* tempNode = head;
	while(tempNode != NULL)
	{
		printf("%d ",tempNode->data);
		tempNode = tempNode->next;
	}
	printf("\n");
}


반응형