연결 리스트로 더하기 프로그램을 만들어보자.
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int number;
struct node* p_next;
}NODE;
void Addnumber_fuction(NODE** pp_head, NODE** pp_tail, int number)
{
if (NULL != *pp_head)
{
(*pp_tail)->p_next = (NODE*)malloc(sizeof(NODE));
*pp_tail = (*pp_tail)->p_next;
}
else
{
*pp_head = (NODE*)malloc(sizeof(NODE));
*pp_tail = *pp_head;
}
(*pp_tail)->number = number;
(*pp_tail)->p_next = NULL;
}
void main()
{
NODE* p_head = NULL, *p_tail = NULL, * p;
int sum = 0, temp;
while (1)
{
printf("숫자를 입력하세요(9999를 누르면 종료한다.) : \n");
scanf_s("%d", &temp);
if (9999 == temp) break;
Addnumber_fuction(&p_head, &p_tail, temp);
}
p = p_head;//입력된 숫자를 출력하기 위해서 노드를 탐색할 포인터에 시작 노드의 주소 값을 대입한다.
//p_head를 직접 사용하면 시작 노드의 위치를 잃어 버린다.
while (NULL != p)
{
if (p != p_head) printf(" + "); // 숫자와 숫자 사이에 +를 출력한다.
printf("%d", p->number); // 입력한 숫자를 출력한다.
sum = sum + p->number; // 입력한 숫자들을 합산한다.
p = p->p_next; // 다음 노드로 이동한다.
}
printf(" = %d\n", sum); //합산 값을 출력한다.
while (NULL != p_head)
{
p = p_head;
p_head = p_head->p_next; // 다음 노드로 이동시킨다.
free(p);
}
p_tail = p_head;
}