从尾到头打印链表
2015-08-18 16:16
225 查看
1.第一种方法:
我们可以利用stack先进后出的特性来进行中转。
stack<Node*> s;
Node*p=head->next;
while(p)
{
s.push(p);
p=p->next;
}
while(!s.empty())
{
printf("%d",s.top()->data);
s.pop();
}
这样很容易就能让链表倒序输出。
2.第二种方法:
我们也可以用递归函数来倒换
void printListrever(Node *pHead)
{
if(pHead==NULL)
{
return;
}
printListrever(pHead->next);
printf("%d",pHead->data);
}
这样也能让链表倒序输出,只是鲁棒性差(不能有太深层的递归)。
3.第三种方法
我们可以对链表进行反转后顺序输出。
void reserv(Node * pHead)
{
Node*pPre=pHead;
if(pHead->next==NULL)
{
return;
}
Node*pCur=pPre->next;
if(pCur->next==NULL)
{
return;
}
Node*pPost=pCur->next;
while(pPost)
{
pCur->next=pPre;
if(pPre==pHead)
{
pCur->next=NULL;
}
pPre=pCur;
pCur=pPost;
pPost=pPost->next;
}
pCur->next=pPre;
pHead->next=pCur;
}
输出后还须给转过回来。
我们可以利用stack先进后出的特性来进行中转。
stack<Node*> s;
Node*p=head->next;
while(p)
{
s.push(p);
p=p->next;
}
while(!s.empty())
{
printf("%d",s.top()->data);
s.pop();
}
这样很容易就能让链表倒序输出。
2.第二种方法:
我们也可以用递归函数来倒换
void printListrever(Node *pHead)
{
if(pHead==NULL)
{
return;
}
printListrever(pHead->next);
printf("%d",pHead->data);
}
这样也能让链表倒序输出,只是鲁棒性差(不能有太深层的递归)。
3.第三种方法
我们可以对链表进行反转后顺序输出。
void reserv(Node * pHead)
{
Node*pPre=pHead;
if(pHead->next==NULL)
{
return;
}
Node*pCur=pPre->next;
if(pCur->next==NULL)
{
return;
}
Node*pPost=pCur->next;
while(pPost)
{
pCur->next=pPre;
if(pPre==pHead)
{
pCur->next=NULL;
}
pPre=pCur;
pCur=pPost;
pPost=pPost->next;
}
pCur->next=pPre;
pHead->next=pCur;
}
输出后还须给转过回来。
相关文章推荐
- 中文乱码问题(转)charset pageEncoding等区别
- Mac下一些小工具安装报错Note
- 路人甲
- swftools使用
- 逗号表达式-----IOS开发学习记录第6天之C语言学习
- ajax
- MySql监控优化
- C语言预预处理命令
- 排序检索C - Where is the Marble?
- 阅读方法
- Linux 内核调试
- FastDFS在.Net平台上的使用
- Linq To EF
- struts2 json返回试验
- 所有中心对称五字母域名生成,扫了一下,com的基本上都被注册了。。。
- 第六周 G题
- ziji
- jquery-chosen 选择框插件
- java.util.date类型保存到mysql数据库报错的问题
- Ubuntu上编译安装Kamailio