c언어 연결리스트 코드 질문
-
게시물 수정 , 삭제는 로그인 필요
제가 꼬리 삽입 함수를 만들어 예를들어 출력을 4->5->6으로 할려하는데 막상 실행하면 NULL만 출력됩니다 왜이러죠??? (아무래도 꼬리삽입 함수가 잘못된거 같은데 어떻게 건들여야할지 모르겠내요)
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode { // 노드 타입
int data;
struct ListNode* link;
} ListNode;
// 오류 처리 함수
void error(char* message);
void insert_first(ListNode* head, int value);
// 노드 pre 뒤에 새로운 노드 삽입
ListNode* delete_first(ListNode* head);
// pre가 가리키는 노드의 다음 노드를 삭제한다.
ListNode* delete(ListNode* head, ListNode* pre);
void print_list(ListNode* head);
void insert_rear(ListNode* head, int value);
// 테스트 프로그램
int main(void)
{
ListNode* head = NULL;
int nx, i = 0;
int data;
printf("요소 갯수 입력: "); scanf_s("%d", &nx);
for (i = 0; i < nx; i++) {
printf("데이터 입력: "); scanf_s("%d", &data);
insert_rear(head, data);
}
print_list(head);
system("PAUSE");
return 0;
}
void error(char* message)
{
fprintf(stderr, "%s\n", message);
exit(1);
}
void insert_first(ListNode* head, int value)
{
ListNode* p = (ListNode*)malloc(sizeof(ListNode)); //(1)
p->data = value; // (2)
p->link = head; // 헤드 포인터의 값을 복사 //(3)
head = p; // 헤드 포인터 변경 //(4)
}
ListNode* delete_first(ListNode* head)
{
ListNode* removed;
if (head == NULL) return NULL;
removed = head; // (1)
head = removed->link; // (2)
free(removed); // (3)
return head; // (4)
}
// pre가 가리키는 노드의 다음 노드를 삭제한다.
ListNode* delete(ListNode* head, ListNode* pre)
{
ListNode* removed;
removed = pre->link;
pre->link = removed->link; // (2)
free(removed); // (3)
return head; // (4)
}
void print_list(ListNode* head)
{
for (ListNode* p = head; p != NULL; p = p->link)
printf("%d->", p->data);
printf("NULL \n");
}
void insert_rear(ListNode* head,int value) {
if (head == NULL) {
insert_first(head,value);
}
else {
ListNode* p = head;
ListNode* ptr = (ListNode*)malloc(sizeof(ListNode));
while (p->link != NULL)
p = p->link;
p->link = ptr;
ptr->link = NULL;
ptr->data = value;
}
}
제가 꼬리 삽입 함수를 만들어 예를들어 출력을 4->5->6으로 할려하는데 막상 실행하면 NULL만 출력됩니다 왜이러죠??? (아무래도 꼬리삽입 함수가 잘못된거 같은데 어떻게 건들여야할지 모르겠내요)
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode { // 노드 타입
int data;
struct ListNode* link;
} ListNode;
// 오류 처리 함수
void error(char* message);
void insert_first(ListNode* head, int value);
// 노드 pre 뒤에 새로운 노드 삽입
ListNode* delete_first(ListNode* head);
// pre가 가리키는 노드의 다음 노드를 삭제한다.
ListNode* delete(ListNode* head, ListNode* pre);
void print_list(ListNode* head);
void insert_rear(ListNode* head, int value);
// 테스트 프로그램
int main(void)
{
ListNode* head = NULL;
int nx, i = 0;
int data;
printf("요소 갯수 입력: "); scanf_s("%d", &nx);
for (i = 0; i < nx; i++) {
printf("데이터 입력: "); scanf_s("%d", &data);
insert_rear(head, data);
}
print_list(head);
system("PAUSE");
return 0;
}
void error(char* message)
{
fprintf(stderr, "%s\n", message);
exit(1);
}
void insert_first(ListNode* head, int value)
{
ListNode* p = (ListNode*)malloc(sizeof(ListNode)); //(1)
p->data = value; // (2)
p->link = head; // 헤드 포인터의 값을 복사 //(3)
head = p; // 헤드 포인터 변경 //(4)
}
ListNode* delete_first(ListNode* head)
{
ListNode* removed;
if (head == NULL) return NULL;
removed = head; // (1)
head = removed->link; // (2)
free(removed); // (3)
return head; // (4)
}
// pre가 가리키는 노드의 다음 노드를 삭제한다.
ListNode* delete(ListNode* head, ListNode* pre)
{
ListNode* removed;
removed = pre->link;
pre->link = removed->link; // (2)
free(removed); // (3)
return head; // (4)
}
void print_list(ListNode* head)
{
for (ListNode* p = head; p != NULL; p = p->link)
printf("%d->", p->data);
printf("NULL \n");
}
void insert_rear(ListNode* head,int value) {
if (head == NULL) {
insert_first(head,value);
}
else {
ListNode* p = head;
ListNode* ptr = (ListNode*)malloc(sizeof(ListNode));
while (p->link != NULL)
p = p->link;
p->link = ptr;
ptr->link = NULL;
ptr->data = value;
}
}
#c언어 연결리스트 #c언어 연결리스트 구현 #c언어 연결리스트 예제 #c언어 연결리스트 노드 추가 #c언어 연결리스트 오름차순 정렬 #c언어 연결리스트 삭제 #c언어 연결리스트 출력 #c언어 연결리스트 정렬 #c언어 연결리스트 노드 삭제 #c언어 연결리스트 검색