2016-12-04 4 views
0

Я написал эту функцию для печати реверса связанного списка оно компенсирует и писать элементы, но он записывает но я хочу написать его, как 4-> 3-> 2-> 1. что я не так? И мне нужно использовать минимальные символы, которые возможны.печати обратной функция

void printReverse(struct node* head) 
{ 

    if (head == NULL) 
     return; 

    printReverse(head->next); 
    cout<<head->data<<endl; 
} 

ответ

0

Вам нужно включить "-->" в cout заявление

cout<<head->data<<"-->"<<endl; 

EDIT:

Вышеуказанная решение будет печатать, как это, 4-->3-->2-->1-->

Чтобы избежать печати --> после последнего номера вам нужно передать два указателя в t он печатает функцию, один - главный и второй указатель, который будет указывать только на первый узел в списке ссылок и использовать оператор if для проверки того, что головной узел и второй узел, указывающий на первый узел в списке ссылок, указывают на тот же узел или нет ,

Попробуйте эту функцию

void printReverse(struct node* head, struct node* head2) 
{ 

    // Base case 
    if (head == NULL) 
     return; 

    // print the list after head node 
    printReverse(head->next, head2); 

    // After everything else is printed, print head 
    if(head->next == head2->next) 
    { 
     printf("%d ", head->data); 
    } 
    else{ 
     printf("%d ->", head->data); 
    } 

} 

struct node* head2 = head; Включать это заявление перед вызовом этой функции, так что head2 направлен к первому узлу.

+0

, но на этот раз он печатает как 4-> 3-> 2-> 1-> – dali

+0

@rondo проверить мой ответ снова. я сделал некоторые изменения –

1

Сначала вы должны включить «->» в вашем соиЬ заявлении

для например: cout<<head->data<<"-->";

После вызова printReverse() функция использование cout<<"\b\b\b "; заявление будет удалить лишние три символа с конца BCZ с помощь backspace escape charcter '\ b' мы возвращаемся и размещаем там пустой charcter.

Ниже программа поможет вам более

#include<stdlib.h> 
#include<iostream> 
using namespace std; 
#include<stdlib.h> // for malloc() 

struct Node 
{ 
int val; 
struct Node *next; 
}; 
typedef struct Node node; 

int main() 
{ 
     node *start,*last,*nn,*start2=NULL; 
     int tmp; 

     node* makenode(int); 
     void printlist(node*); 
     void printReverse(node*); 

     start=last=NULL; 

     cout<<"Press -99 to stop the process "<<endl; 
     while(1) 
     { 
      cout<<"enter no :"; 
      cin>>tmp; 
      if(tmp==-99) 
      break; 
      nn=makenode(tmp); 
      if(start==NULL) 
       start=nn; 
      else 
       last->next=nn; 
      last=nn; 
     } 

cout<<"\n\nOriginal Link list :"; 
printlist(start); 
cout<<"\b\b\b "; 

cout<<"\n\nReverse of link list :"; 
printReverse(start); 
cout<<"\b\b\b "; 

return 0; 

} 

node* makenode(int tmp) 
{ 
     node *nn; 
     nn=(node*)malloc(sizeof(node)); 
     nn->val=tmp; 
     nn->next=NULL; 
    return nn; 
} 

void printlist(node* ptr) 
{ 
while(ptr) 
{ 
    cout<<ptr->val<<"-->"; 
    ptr=ptr->next; 
} 
} 

void printReverse(node* head) 
{ 

    if (head == NULL) 
     return; 

    printReverse(head->next); 
    cout<<head->val<<"-->"; 
} 

Output of the above program

+0

все сделано. Спасибо :) – dali

Смежные вопросы