反转链表题解

反转链表

http://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca

题目
已经定义好了数据结构,是一个经典题。
两个思路:
1、拿额外存储空间放,遍历一次。放的时候构建链表间关系。
2、一共三个指针,从头到尾遍历的时候,直接构建。

建议2,练自己对链表的空间思维能力
1就是循环建立关系,往里放,面试官给你10分钟你还做不出来,捐了吧。
如果能脑海中画出图来,那就这道题ok了,就是结果不对而调整细节的事情了。就不用捐了。
开始起手式。
数据结构准备:

ListNode left = null;
ListNode cur = head;
ListNode right = null;

劲儿已经起来了,开始挥拳。
算法:
1、确定解题规模,拿while走一遍链表,就O(n)

while(cur != null) {

2、想好怎么传递这个指针,边走边连,要连几下。
先肯定把右边的给上,没人影响它。

right = cur.next;

3、再就用一个费一个,cur.next被用了,该搞它了。

cur.next = left;

4、这时候已经是那么回事了,尾巴已经到位了。
那得想啥,从屁股往头走,推:
下一个cur,next都放到该放的位置。

left = cur;
cur = right;
}

5、跑个测试用例,通了。
好,打完收工。关键词松果,懂得都懂。

按照自己习惯总结一下(没习惯也得养成这个习惯):
1、对链表题,脑海中要有想象力
2、要总结出最小运算单元,这是要往while一次循环里面写的;
3、记得非空检查,初始化和算法跑的时候都得看看。
4、自信一点。犯错了再改都行,但是得自信。

提个bug:
题目提交之后,可以任意拖动那个“恭喜通过本题”的框,另外没有关闭这个的按钮,或者不显眼。

好,收工。
呼~

全部评论

相关推荐

10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务