insertNode(node_p L, node_p p, char *x); // p가 가르키는 다음 노드를 삽입
이 함수를 만드는 건대요. 자꾸 p가 가르키는 노드 다음에 삽입해야하는데
노드 맨 앞으로 튀어나오는 이유가 뭐죠 ㅠㅠ?
도대체 어떻게 해야 노드 다음으로 나올까요 ㅠㅠ
여기밖에 도와줄때가 없어요 ㅠㅠ
===============================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct listNode *node_p;
struct listNode {
char data[10];
node_p link;
};
node_p L = NULL;
void printList(node_p L);
node_p addLastNode(node_p L, char *x); // 마지막 노드를 삽입
node_p searchNode(node_p L, char *x); // 노드를 탐색
node_p insertNode(node_p L, node_p p, char *x); // p가 가르키는 다음 노드를 삽입
node_p deleteNext(node_p L, node_p p); // p가 가르키는 다음 노드를 삭제
void printList(node_p L)
{
node_p p;
printf("\n(");
p = L;
while (p != NULL) {
printf("%s", p->data);
p = p->link;
if (p != NULL) printf(", ");
}
printf(")\n");
}
node_p addLastNode(node_p L, char *x)
{
node_p newNode, p;
newNode = (node_p)malloc(sizeof(struct listNode));
strcpy(newNode->data, x);
newNode->link = NULL;
if (L == NULL) {
L = newNode;
newNode->link = NULL;
return L;
}
p = L;
while (p->link != NULL)
p = p->link;
p->link = newNode;
return L;
}
node_p searchNode(node_p L, char *x)
{
node_p p;
p = L;
while(p!= NULL){
if(x== p->data)
return p;
p = p->link;
}
return p;
}
node_p insertNode(node_p L, node_p p, char *x)
// 뭐가 잘못됐는지 계속 노드 뒤로 안나오고 맨앞으로 튀어나오네...
{
node_p newNode;
newNode = (node_p)malloc(sizeof(struct listNode));
strcpy(newNode->data, x);
p = searchNode(L, x);
if (L == NULL){
L = newNode;
newNode->link = NULL;
// return L;
}
else if (p==NULL){
newNode->link = L;
L = newNode;
// return L;
}
else{ //p가 가리키는 노드의 다음 노드로 삽입
newNode->link = p->link;
p->link = newNode;
//return L;
}
return L;
}
/*
node_p deleteNext(node_p L, node_p p)
{
}
*/
void main()
{
int menu = 0;
char item[10], item2[10];
node_p p;
while (menu != 9) {
printf("\n연결 리스트 연산\n\n");
printf("1. 마지막 원소로 삽입\n");
printf("2. 원소 탐색 후 다음 노드로 삽입\n");
printf("3. 원소 탐색 후 다음 노드 삭제\n");
printf("9. 종료\n\n");
printf("선택 : ");
scanf("%d", &menu);
switch(menu) {
case 1 :
printf("\n삽입할 원소값 : ");
scanf("%s", &item);
L = addLastNode(L, item);
printList(L);
break;
case 2 :
printf("\n탐색할 원소값 : ");
scanf("%s", &item);
printf("\n삽입할 원소값 : ");
scanf("%s", &item2);
p = searchNode(L, item);
L = insertNode(L, p, item2);
printList(L);
break;
case 3 :
printf("\n탐색할 원소값 : ");
scanf("%s", &item);
// p = searchNode(L, item);
// L = deleteNext(L, p);
printList(L);
break;
case 9 :
printf("\n프로그램 종료\n");
break;
default :
printf("\n잘못 선택함\n");
}
}
getch();
}
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.