学习要点:
1、#include<stack>的std::stack<T> 类型的使用
2、链表的生成最后要使他们的Next指向null
3、程序递归的写法(想了很久,没想出来~~)
4、结构体的正确定义(具体看C语法那个专栏)
下面是源码:
#include <stdio.h>
#include <malloc.h>
#include <stack>
typedef int DataType;
typedef struct Node{
DataType data;
struct Node *next;
} Node;
//方法一:使用栈
void NodeReverse(Node* node){
std::stack<Node*> stack;
while(node->next != NULL){
stack.push(node);
node = node->next;
}
while(!stack.empty()){
Node* tmp = stack.top();
printf("%d ", tmp->data);
stack.pop(); //忘记这一行了
}
}
//方法二:使用递归
void reserve(Node* node){
if(node != NULL){ //注意程序鲁棒性
if(node->next != NULL){
reserve(node->next);
}
printf("%d ", node->data);
}
}
void main(){
Node* L = (Node*)malloc(sizeof(Node));
L->data = NULL;
Node *p= L;
for(int i = 0; i < 10; i++){
Node* node = (Node*)malloc(sizeof(Node));
node->data = i;
p->next = node;
p = node;
}
p->next = NULL; //记住啊,别忘了,链表的生成最后要使他们的Next指向null
reserve(L);
NodeReverse(L);
Node *pp = L;
while(pp->next != NULL){
printf("%d ", pp->data);
pp = pp->next;
}
printf("xxxx");
}