Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 언어에서 실제로 반전하지 않고 Linked List의 반전 인쇄

<시간/>

작업은 재귀 함수를 사용하여 주어진 연결 목록의 역순을 인쇄하는 것입니다. 프로그램은 역순으로 인쇄해야 하지만 목록을 역순으로 인쇄해서는 안 됩니다. 즉, 노드의 순서는 동일하게 유지됩니다.

여기서 프로그램은 리스트의 마지막 노드에 저장된 NULL을 검사하고 헤드 노드의 데이터를 출력할 때까지 첫 번째 노드의 주소를 포함하는 헤드 포인터를 다음 노드로 이동합니다.

C 언어에서 실제로 반전하지 않고 Linked List의 반전 인쇄

예시

Input: 29 34 43 56
Output: 56 43 34 29

먼저 노드가 목록에 삽입되고 포인터가 삽입된 노드를 가리키기 시작합니다. 최종 목록이 생성된 후 임시 포인터가 첫 번째 노드 포인터로 초기화되고 마지막 노드가 아무 것도 가리키지 않고 마지막 노드에서 헤드 포인터까지 목록이 탐색되기 때문에 노드의 다음 주소가 NULL이 될 때까지 계속 증가한다고 가정해 보겠습니다. 실제로 목록을 뒤집지 않고 목록의 역순을 표시합니다.

아래 코드는 주어진 알고리즘의 c 구현을 보여줍니다.

알고리즘

START
   Step 1 -> create node variable of type structure
      Declare int data
      Declare pointer of type node using *next
   Step 2 ->Declare function void reverse(node* head)
      IF head == NULL
         return
      Call reverse(head->next)
      Print head->data
   Step 3 -> Declare Function void push(node** header, char newdata)
      Allocate memory using malloc
      Set newnode->data = newdata
      Set newnode->next = (*header)
      Set (*header) = newnode
   Step 4 ->In Main()
      Create list using node* head = NULL
      Insert elements through push(&head, 56)
      Call reverse(head)
STOP

예시

#include<stdio.h>
#include<stdlib.h>
//creating structure for a node
struct node {
   int data;
   node* next;
};
//function to print reverse of the data in the list
void reverse(node* head) {
   if (head == NULL)
      return;
   reverse(head->next);
   printf("%d ", head->data);
}
//function to puch the node in the list
void push(node** header, char newdata) {
   struct node* newnode = (struct node*)malloc(sizeof(struct node));
   newnode->data = newdata;
   newnode->next = (*header);
   (*header) = newnode;
}
int main() {
   node* head = NULL;
   push(&head, 56); //calling function to push 56 in the list
   push(&head, 43);
   push(&head, 34);
   push(&head, 29);
   reverse(head);
   return 0;
}

출력

위의 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.

reverse of a linked list 56 43 34 29