컴공 일기128
게시글 주소: https://dev.orbi.kr/00057573069
다음 문제를 코딩한 겁니다.... 분명 실행결과는 3 6 2 7 1 5 4인데.... 왜 틀린 거냐고 컴파일러 양반 ㅜㅜㅜㅜㅜㅜㅜㅜ
예외가 조금 있나 봐요... 내 환형 링크드 리스트는 완벽하다고 생각했는데 :< 역시 이 문제는 LinkedList를 기반으로 하기 보다는 덱이나 큐로 접근하는 게 더 효율적인 듯 싶습니다. 내일은 큐나 덱으로 접근해보아야 겠어요...
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct tagNode
{
int Data;
struct tagNode* PrevNode;
struct tagNode* NextNode;
}Node;
Node* CDLL_CreateNode(int NewData)
{
Node* NewNode = (Node*)malloc(sizeof(Node));
NewNode->Data = NewData;
NewNode->PrevNode = NULL;
NewNode->NextNode = NULL;
return NewNode;
}
void CDLL_RemoveNode(Node** Head, Node* Remove)
{
if ((*Head) == Remove)
{
(*Head)->PrevNode->NextNode = Remove->NextNode;
(*Head)->NextNode->PrevNode = Remove->PrevNode;
*Head = Remove->NextNode;
Remove->PrevNode = NULL;
Remove->NextNode = NULL;
}
else
{
Node* Temp = Remove;
Remove->PrevNode->NextNode = Temp->NextNode;
Remove->NextNode->PrevNode = Temp->PrevNode;
Remove->PrevNode = NULL;
Remove->NextNode = NULL;
}
}
void CDLL_AppendNode(Node** Head, Node* NewNode)
{
if ((*Head) == NULL)
{
*Head = NewNode;
(*Head)->PrevNode = *Head;
(*Head)->NextNode = *Head;
}
else
{
Node* Tail = (*Head)->PrevNode;
Tail->NextNode->PrevNode = NewNode;
Tail->NextNode = NewNode;
NewNode->NextNode = (*Head);
NewNode->PrevNode = Tail;
}
}
int main(void)
{
int N;
int K;
int M;
int i;
int cnt = 0;
scanf("%d %d %d", &N, &K, &M);
Node* List = NULL;
Node* NewNode = NULL;
Node* Current = NULL;
for (i = 1; i < N + 1; i++) {
NewNode = CDLL_CreateNode(i);
CDLL_AppendNode(&List, NewNode);
}
Current = List;
while (N >= 1)
{
if (cnt == M)
{
for( i=1; i <K+1; i++)
{
Current = Current->PrevNode;
}
printf("%d\n", Current->Data);
Current = Current->PrevNode;
CDLL_RemoveNode(&List, Current->NextNode);
N--;
cnt++;
cnt = 0;
}
else
{
for (i = 1; i < K; i++)
{
Current = Current->NextNode;
}
printf("%d\n", Current->Data);
Current = Current->NextNode;
CDLL_RemoveNode(&List, Current->PrevNode);
N--;
cnt++;
}
}
}
[실행결과]
7 3 4
3
6
2
7
1
5
4
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.


멋지당
몇학년이세요?
2학년입니다!