연결 목록은 데이터 요소를 연결 형식으로 저장하는 데이터 구조입니다. 연결 목록의 각 노드에는 데이터 요소와 링크가 있습니다.
연결 목록의 역순 인쇄는 문제 해결에서 해결해야 하는 일반적인 문제입니다. 그래서, 여기서 우리는 C++ 프로그래밍 언어로 연결 리스트의 역순을 출력하는 흥미로운 방법을 배울 것입니다.
일반적으로 역방향 연결 목록을 인쇄하려면 목록을 수정하거나 목록을 여러 번 탐색해야 하지만 이 방법은 그런 것이 필요하지 않으며 연결 목록을 한 번만 탐색합니다.
이 방법의 논리는 캐리지 리턴을 사용하여 문자열을 역으로 인쇄하는 것입니다. 캐리지 리턴은 프린터(디스플레이의 경우 커서)에 라인의 위치를 떠나 화면의 특정 위치로 이동하는 명령입니다. 이제 논리는 인쇄할 목록의 요소를 위한 공간을 남겨두고 n(목록의 길이)을 전진시키는 것입니다. 인쇄할 첫 번째 요소 앞에 n -1 공백이 남아 있어야 합니다. 그런 다음 초에 대해 n-2를 입력하는 식입니다.
이제 개념을 설명하는 프로그램을 살펴보겠습니다.
예시
#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; struct Node { int data; struct Node* next; }; void printReverse(struct Node** head_ref, int n) ; void push(struct Node** head_ref, int new_data) ; int printList(struct Node* head) ; int main(){ struct Node* head = NULL; push(&head, 2); push(&head, 7); push(&head, 3); push(&head, 5); push(&head, 4); push(&head, 6); printf("Given linked list:\n"); int n = printList(head); printf("\nReversed Linked list:\n"); printReverse(&head, n); return 0; } void printReverse(struct Node** head_ref, int n){ int j = 0; struct Node* current = *head_ref; while (current != NULL) { for (int i = 0; i < 2 * (n - j); i++) cout<<" "; cout<<current->data<<"\r"; current = current->next; j++; } } void push(struct Node** head_ref, int new_data){ struct Node* new_node = (struct Node*)malloc(sizeof(struct Node)); new_node->data = new_data; new_node->next = (*head_ref); (*head_ref) = new_node; } int printList(struct Node* head){ int i = 0; struct Node* temp = head; while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; i++; } return i; }
출력
Given linked list: 6 4 5 3 7 2 Reversed Linked list: 2 7 3 5 4 6