#include <stdio.h>
#include <stack>
#include <string>
#include <iostream>
using namespace std;
#include <stack>
typedef struct Link{
int value;
struct Link * LinkNext ;
}Link,* LinkList;
void initList(LinkList * head ){
if (head != NULL) {
for (int i=0; i<10; i++) {
LinkList p = (LinkList)malloc(sizeof(Link));
p->value = i;
p->LinkNext = (*head)->LinkNext;
(*head)->LinkNext = p;
}
}
}
LinkList reverse(LinkList head){
LinkList last = NULL ;
LinkList start = head ;
while (start != NULL) {
LinkList temp = start->LinkNext;
start->LinkNext = last ;
last = start ;
start = temp ;
}
return last;
}
LinkList reverse_DG(LinkList start , LinkList last = NULL){
if(start == NULL)
return last;
LinkList temp = start->LinkNext;
start->LinkNext = last;
return reverse_DG(temp , start);
}
void printList(LinkList start){
if (start != NULL) {
while (start != NULL) {
cout<<start->value<<" ";
start = start->LinkNext;
}
}
}
//从尾到头打印链表方法1 递归
void Print_method1(LinkList head){
if (head == NULL) {
return ;
}
Print_method1(head->LinkNext);
cout<<head->value<<" ";
}
//从尾到头打印链表2 利用栈
void Print_methid2(LinkList head){
if(head != NULL || head->LinkNext != NULL){
stack<int> list ;
while( head !=NULL ){
list.push(head->value);
head = head->LinkNext;
}
while(!list.empty()){
cout<<list.top()<<" ";
list.pop();
}
}
}
int main(int argc , const char * argv[]) {
LinkList head = (LinkList)malloc(sizeof(Link));
head->LinkNext = NULL;
initList(&head);
cout<<"原始的数值:"<<endl;
printList(head->LinkNext);
LinkList q = NULL;
q = reverse_DG(head->LinkNext);
// q = reverse(head->LinkNext);
cout<<endl<<"反转后的的数值:"<<endl;
printList(q);
cout<<endl<<"从尾到头打印链表"<<endl;
//Print_method1(q);
Print_methid2(q);
return 0;
}
从尾到头输出单链表
最新推荐文章于 2021-02-03 17:40:14 发布