【剑指offer】递归循环两种方式反转链表
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25737023
本文分别用非递归和递归两种方式实现了链表的反转,在九度OJ上AC。
- 题目描写叙述:
-
输入一个链表,反转链表后,输出链表的全部元素。
(hint : 请务必使用链表)
- 输入:
-
输入可能包括多个測试例子,输入以EOF结束。
对于每一个測试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包括n个整数t(0<=t<=1000000):代表链表元素。
- 输出:
-
相应每一个測试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。
- 例子输入:
-
5
1 2 3 4 5
0
- 例子输出:
-
5 4 3 2 1
NULL
非常明显,翻转后,尾节点和头结点互换了。
我们须要设置三个指针,分别指向当前要反转的节点、当前要反转节点的前一个节点、当前要反转节点的下一个节点。要注意链表为空,以及仅仅有一个头结点的情况。
非递归实现例如以下:
/*
反转链表,返回翻转后的头结点
*/
pNode ReverseList(pNode pHead)
{
if(pHead == NULL)
return NULL;
if(pHead->next == NULL)
return pHead; pNode pCur = pHead;
pNode pPre = NULL;
while(pCur != NULL)
{
pNode pNext = pCur->next;
pCur->next = pPre;
pPre = pCur;
pCur = pNext;
}
return pPre;
}
递归实现例如以下:
/*
递归实现反转链表,返回翻转后的头结点
*/
pNode ReverseListRecursivly(pNode pPre,pNode pCur)
{
if(pCur == NULL)
return NULL;
if(pCur->next == NULL)
{
pCur->next = pPre;
return pCur;
} pNode pNext = pCur->next;
pCur->next = pPre;
pNode pNewHead = ReverseListRecursivly(pCur,pNext);
return pNewHead;
} pNode ReverseList2(pNode pHead)
{
return ReverseListRecursivly(NULL,pHead);
}
依据题目要求,測试代码例如以下:
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
pNode pHead = NULL;
if(n > 0)
{
int i,data;
scanf("%d",&data);
pHead =(pNode)malloc(sizeof(Node));
if(pHead == NULL)
exit(EXIT_FAILURE);
pHead->data = data;
pHead->next = NULL; pNode pCur = pHead;
for(i=0;i<n-1;i++)
{
scanf("%d",&data);
pNode pNew =(pNode)malloc(sizeof(Node));
if(pNew == NULL)
exit(EXIT_FAILURE);
pNew->data = data;
pNew->next = NULL;
pCur->next = pNew;
pCur = pCur->next;
}
} pNode pNewHead = ReverseList2(pHead);
if(pNewHead == NULL)
printf("NULL\n");
else
{
pNode pCur = pNewHead;
while(pCur != NULL)
{
//这里主要时要注意输出的格式
if(pCur->next == NULL)
printf("%d\n",pCur->data);
else
printf("%d ",pCur->data);
pCur = pCur->next;
}
}
}
return 0;
}
/************************************************************** Problem: 1518 User: mmc_maodun Language: C Result: Accepted Time:150 ms Memory:2364 kb****************************************************************/【剑指offer】递归循环两种方式反转链表的更多相关文章
- 《剑指offer》 合并两个排序的链表
本题来自<剑指offer> 合并两个排序的链表 题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: A:采用递归的方式(C++ C ...
- 剑指Offer:合并两个排序的链表【25】
剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合 ...
- 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表 Offer 25 该问题的原型就是多项式的合并. 实现较简单,没有特殊需要注意的问题. package com.walegarrett.offer; /* ...
- 【剑指Offer】合并两个排序的链表 解题报告(Python)
[剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interview ...
- 【Java】 剑指offer(25) 合并两个排序的链表
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照 ...
- Go语言实现:【剑指offer】合并两个排序的链表
该题目来源于牛客网<剑指offer>专题. 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Go语言实现: //递归 func merge(l ...
- [剑指offer]25.合并两个排序的链表(迭代+递归)
25.合并两个排序的链表 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1-> ...
- 剑指Offer 16. 合并两个排序的链表 (链表)
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目地址 https://www.nowcoder.com/practice/d8b6b4358 ...
- 剑指offer:合并两个排序的链表
题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解题思路: 这道题应该考察也是链表的相关操作.具体实现,新建一个新的链表,用两个指针分别指向两 ...
随机推荐
- Oracle Database 11g Express Edition 使用小结(windows)
如何启动oraclewindows系统服务中有一个服务叫:[OracleService[SID]]SID是你安装oracle xe时候的实例名,如果你没有改默认的是[XE], OracleServic ...
- netbeans中wicket插件对应的jQuery-ui版本
在netbean里使用wicket,我们经常习惯使用netbeans自带的wicket插件直接安装wicket,但是因为netbean上的 wicket插件版本比较老,使得我们很多新的第三方wicke ...
- jQuery中的bind绑定事件与文本框改变事件的临时解决方法
暂时没有想到什么好的解决办法,我现在加了个浏览器判断非ie的话就注册blur事件,这样有个问题就是blur实在别的控件活动焦点的时候,txtStation控件注册的方法是为了填充它紧挨着的一个下拉列表 ...
- JavaScript对象(窗口对象 定时器对象 )
1:窗口时间 confirm(str):确认对话框,确认返回trun,取消返回false,但是必须要有两个return:不然就算按下取消也会提交 第一个return:用于保证确认按钮运行 <sc ...
- 机器学习中的算法-决策树模型组合之随机森林与GBDT
机器学习中的算法(1)-决策树模型组合之随机森林与GBDT 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使 ...
- Wireshark基本介绍及应用tcp
wireshark介绍 wireshark的官方下载网站: http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示 ...
- effective c++:virtual函数的替代方案
绝不重新定义继承来的缺省值 首先明确下,虚函数是动态绑定,缺省参数值是静态绑定 // a class for geometric shapes class Shape { public: enum S ...
- 10本最新的Android开发电子书免费下载
最新的Android开发电子书大集合,免费下载! 1.The Business of Android Apps Development, 2nd Edition http://ebook.goodfa ...
- JDBC连接Oracle数据库的问题
场景:最近做一个java web项目,使用jdbc连接Oracle数据库,遇到了两个问题. 问题1:jdbc连接不上Ubuntu Oracle服务器? 后来发现这个问题的原因是由于连接字符串写错了,修 ...
- China特色创新现状
1,unity桌面 2,http://www.cs2c.com.cn/ 3,http://os.51cto.com/art/200602/20350.htm 4,http://zhidao.baidu ...