数据结构与算法学习日记
前言
说明:此博客主要记录我学习过程中遇到的问题以及分享解决办法。同时也欢迎各位指出存在问题的地方和建议
课程是尚硅谷的,课程链接:点这里
1、P22腾讯面试题
题目要求:将单链表反转
老师的代码:
while (ture) {
next = cur.next;
cur.next = reversehead.next;//不好理解的就是这一句
rehead.next = cur;
cur = next;
}
不好理解的地方在于,老师解释的时候还是按照定性思维去思考:等号左边内容指向等号右边内容。如果按照这样理解,那么cur.next指向的内容实际上就是新链表头部后方的null区域,该段区域看似无法被指向。
理解方法:
将等号仍然看成赋值符号。以3个有效节点为例,我画了一张图:
经过IDEA中debug确认了赋值过程后印证了这一解释:
loop 1:
sentence1
sentence2
sentence3
sentence4
Attention:next在此处主要是为了保存cur的后续节点,按照jvm的机制,当一个指针指向某个节点后,对该指针进行任何操作都会影响到原链表。
Loop 2、Loop 3过程类似,由我画的图可以看出。