그림 12-7처럼 연결 리스트에서 자기 참조 구조체 데이터 중 2번 구조체의 값을 더 이상 저장할 필요가 없다면, 1번 구조체의 자기 참조 포인터 변수의 값, 즉 가리키고 있는 구조체의 주소 정보를 204번지가 아닌 304번지로 변경하면 됩니다.
이제 예제를 통해 실습해 보겠습니다. 구조체의 주소를 갖는 포인터 변수 p를 선언하고 연결 리스트의 처음에 위치한 구조체의 주소로 초기화하였습니다. 그리고 이 포인터 변수가 for 반복문과 함께 구조체 리스트의 처음과 끝까지 순회하면서 각 구조체의 data 값을 출력하는 코드입니다.
list_3.c
#include <stdio.h> struct abc { // 구조체 정의 int data; struct abc *next; // 자기 참조 구조체 }; main() { struct abc x; // 구조체 변수 x 선언 struct abc y; struct abc z; x.data = 10; y.data = 20; z.data = 30; x.next = &y; // 구조체 연결 y.next = &z; z.next = NULL; struct abc *p; // 연결 리스트 순회를 위한 포인터 변수 선언 for (p = &x; p != NULL; p = p->next) { // 연결 리스트 순회 printf("%d\n", p->data); } printf("구조체 y 삭제 후 \n"); x.next = &z; y.next = NULL; for (p = &x; p != NULL; p = p->next) { printf("%d\n", p->data); } }