单链表——反向输出结点
给定一个单链表,设计一个从尾到头反向输出的算法
- 算法一:对空间复杂度没有要求
1)利用栈
void RePrint(LinkList &L){
InitStack(S);//初始化栈
LNode *p=L->next;
while(p){
push(S,p->data);//将数据依次入栈
p=p->next;
}
while(!isEmpty(S))
print(pop(s));//栈非空,打印栈中元素
2)利用递归
先空着,明天默写
- 对空间复杂度有要求——逆置后输出
void Reverse(LinkList &L){//逆置函数
if(!L||!L->next) return 0;
LNode *p=L->next,*q;
L->next=null;
while(p){
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
void Print(LinkList L){//打印输出函数
Reverse(L);
LNode *p=L->next;
while(p){
print(p->data);//输出数据
p=p->next;
}
}