打印反转功能

时间:2016-12-04 12:18:36

标签: data-structures

我写了这个函数来打印链接列表的反向它反转并写入元素,但它写入 4 3 2 1 但我想写它 4-> 3→2→1。我错了什么?我需要使用尽可能少的字符。

void printReverse(struct node* head)
{

    if (head == NULL)
       return;

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

2 个答案:

答案 0 :(得分:1)

首先,您必须包含“ - &gt;”在你的cout声明中

例如:cout<<head->data<<"-->";

在调用printReverse()函数后使用cout<<"\b\b\b ";语句,它将在结束bcz中删除额外的三个字符,并在退格转义字符'\ b'的帮助下返回并将空字符放在那里。

以下程序将为您提供更多帮助

#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

答案 1 :(得分:0)

您需要在"-->"声明

中加入cout
cout<<head->data<<"-->"<<endl;

修改

上述解决方案将按照这样的方式打印,4-->3-->2-->1-->

为避免在最后一个数字后打印-->,你需要在print函数中传递两个指针,一个是head和second指针,它只指向linklist中的第一个节点,并使用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指向第一个节点。