我写了这个函数来打印链接列表的反向它反转并写入元素,但它写入 4 3 2 1 但我想写它 4-> 3→2→1。我错了什么?我需要使用尽可能少的字符。
void printReverse(struct node* head)
{
if (head == NULL)
return;
printReverse(head->next);
cout<<head->data<<endl;
}
答案 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<<"-->";
}
答案 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指向第一个节点。