Computer >> Máy Tính >  >> Lập trình >> C ++

Một phương pháp thú vị để in ngược danh sách được liên kết trong C ++

Danh sách liên kết là một cấu trúc dữ liệu lưu trữ các phần tử dữ liệu ở dạng liên kết. Mỗi nút của danh sách được liên kết có một phần tử dữ liệu và một liên kết.

In đảo ngược danh sách liên kết là một vấn đề phổ biến cần được giải quyết trong quá trình giải quyết vấn đề. Vì vậy, ở đây chúng ta sẽ tìm hiểu một cách thú vị để in ngược danh sách được liên kết trong ngôn ngữ lập trình c ++.

Nói chung, việc in danh sách được liên kết ngược cần sửa đổi trong danh sách hoặc nhiều lần duyệt qua danh sách nhưng phương pháp này không yêu cầu bất kỳ điều gì như vậy và cũng chỉ duyệt qua danh sách được liên kết một lần.

Logic của phương pháp này là sử dụng ký tự xuống dòng để in ngược lại chuỗi. Vận chuyển trở lại là lệnh cho máy in (con trỏ trong trường hợp hiển thị) để rời khỏi các vị trí trên dòng và di chuyển đến một vị trí cụ thể trong một màn hình. Bây giờ, logic là tăng n (độ dài của danh sách) để lại khoảng trống cho các phần tử của danh sách được in ra. Phải còn n -1 khoảng trắng trước phần tử đầu tiên được in. sau đó n-2 cho lần thứ hai và tiếp tục như vậy.

Bây giờ chúng ta hãy xem một chương trình để minh họa khái niệm,

Ví dụ

#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;
}

Đầu ra

Given linked list:
6 4 5 3 7 2
Reversed Linked list:
2 7 3 5 4 6