c언어 연결리스트 코드 질문

c언어 연결리스트 코드 질문

작성일 2020.03.10댓글 1건
    게시물 수정 , 삭제는 로그인 필요

제가 꼬리 삽입 함수를 만들어 예를들어 출력을 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언어 연결리스트 검색

profile_image 익명 작성일 -

main 함수에서 포인터변수의 주소값을 넘겨주었고, 이것을 변경하는 것은 다른 함수입니다.

전역변수나 포인터를 사용하여 넘겨주어야 올바르게 동작할 것 같습니다.

내용은 잘 짜신 것 같은데, main 함수에서 head 에 담겨져 있는 값을 넘겨주었지 결국 main 함수의 head 값은 다른 함수에서 변경되지 않기 때문에 나오는 문제입니다.

void swap(int a, int b) => void swap(int *a, int *b)

위와 같은 오류입니다.

감사합니다.

https://yys630.tistory.com/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/C%EC%96%B8%EC%96%B4

C언어 연결리스트 기초 질문드립니다

연결리스트 생성 코드라고 나와있습니다 사진에는 없지만 상단부에 노드 구조체가 선언되어 있습니다 Digit를 입력받는것까진 알겠는데 while부터 제...

c언어 연결리스트 질문이요!

... 질문자님의 코드처럼 첫번째 연결리스트, 두번째 연결리스트, 2개를 합치는 main을 따로따로 만들었는데 그럴필요가 없습니다. 연결리스트...

급함)) C언어 연결리스트 작동 방법

책의 목록을 관리하는 프로그램으로, 엔터 입력 전까지 정보를 받다가 엔터가 입력되면 여태 넣었던 정보를 출력하는 코드입니다. 연결리스트가...