从尾到头打印链表
来源:互联网 发布:阿里大数据分析报告 编辑:程序博客网 时间:2024/06/06 04:56
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值
思路:
1,栈,根据面试官需要是否要改变链表结构
2,递归,原理用到栈
3,可以改变链表结构,就把链头变链尾,改变指针方向
#include<iostream>#include<stack>using namespace std;struct listnode{int date;listnode *next;};void creatlist(int arr[],int length,listnode *&listhead){if(arr==NULL||length<0)return;listhead=(listnode *)malloc(sizeof(listnode));listhead->date=arr[0];listhead->next=NULL;listnode *p=listhead;for(int i=1;i<length;i++){listnode *q=(listnode *)malloc(sizeof(listnode));q->date=arr[i];q->next=p->next;p->next=q;p=q;}}void printlist(listnode *listhead){while(listhead!=NULL){cout<<listhead->date<<" ";listhead=listhead->next;}cout<<endl;}void reverselist(listnode *&listhead){if(listhead==NULL)return;listnode *rear=listhead,*front=listhead->next;rear->next=NULL;while(front!=NULL){listnode *p=front;front=front->next;p->next=rear;rear=p;}if(rear->next!=NULL)listhead=rear;}void reverstack(listnode *listhead){std::stack<listnode *> lstack;listnode *head=listhead;while(head!=NULL){lstack.push(head);head=head->next;}while(!lstack.empty()){cout<<lstack.top()->date<<" ";lstack.pop();}cout<<endl;}void reverre(listnode *listhead){if(listhead==NULL)return;else{reverre(listhead->next);cout<<listhead->date<<" ";}}void main(){int arr[10]={0,1,2,3,4,5,6,7,8,9};listnode *listhead=NULL;creatlist(arr,sizeof(arr)/sizeof(int),listhead);//reverselist(listhead);//printlist(listhead);//reverstack(listhead);reverre(listhead);}
0 0
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 【20】从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- Offer5 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 大数的幂 java的用法
- php如何利用ftp获取文件
- 【一些题】打印字符串的所有组合
- 管理recovery catalog
- springMVC因表单参数不匹配报错
- 从尾到头打印链表
- c语言经典归纳 001
- 跳表面试参考
- jQuery的 $(".ex .hide")
- 网络爬虫实现
- srting的类构造函数、析构函数、拷贝构造函数与赋值构造函数
- Linux多进程编程学习笔记一
- 终于等到“你”之“失踪的桌面声音图标”
- leetcode - Binary Tree Level Order Traversal II