티스토리 뷰

DLL응용문제

 

#include <stdio.h>
#include <stdlib.h>
struct node {
	int data;
	struct node *next;
	struct node *prev;
};
struct node* head = 0;

void addToDLL(int n)
{
	struct node* cur;
	cur = (struct node*)malloc(sizeof(struct node));
	cur->data = n;
	cur->next = 0;
	cur->prev = 0;

	if (head == 0) {
		head = cur;
		return;
	}
	{ //끝을 찾는다
		struct node* temp = head;
		while (temp->next != 0) {
			temp = temp->next;
		}
		temp->next = cur;
		cur->prev = temp;
		return;
	}
}


void findFB2(int n)
{
	struct node* cur = head;

	if (head == 0) {
		printf("-999");
		return;
	}
	while (1) { //검색
		if (cur == 0) {
			if (head == 0) { // DLL 이없다. return.
				return;
			}
			printf("-999"); //node 를 찾지 못함.
			return;
		}
		if (cur->data == n) { //찾은경우.
			break;
		}
		cur = cur->next;
	}

	if (cur->prev == 0) {
		printf("-999 "); //앞이 NULL

	}
	else {  //첫번째 앞이 null 이 아닐경우

		if (cur->prev->prev == 0) { //두번째 앞이 null일 경우
			printf("-999 ");
		}
		else {  // 두번쨰 앞 값이 있을 경우
			printf("%d ", cur->prev->prev->data);
		}
	}


	if (cur->next == 0) { //뒤가 NULL
		printf("-999");

	}
	else { // 첫번째 뒤가 NULL 이 아닐 경우

		if (cur->next->next == 0) { //두번째 뒤가 null일 경우
			printf("-999");
		}
		else { //두번째 뒤 값이 있을 경우
			printf("%d", cur->next->next->data);
		}
	}
	return;

}


void showDLL()
{
	struct node* cur = head;
	if (head == 0) {
		return;
	}
	while (cur != 0) {
		printf("%d ", cur->data);
		cur = cur->next;
	}
	return;
}

int main(void)
{
	int num, data1, data2, i;

	scanf("%d", &num);
	for (i = 0; i < num; i++) {
		scanf("%d", &data1);
		addToDLL(data1);
	}
	scanf("%d", &data1);
	findFB2(data1);

}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31