【事件】
某名数据结构基础网络学员在“单链表的基本算法”部分连问两个问题:
老师,我while语句里面
j<i-1
改为j<i
,else里面直接q=p
可以么?
老师,你这样万一刚好q->next==NULL
呢,这样没影响吧?
我的“即时”回答,也已经是10个小时之后了,我不知道他看到解答后,状态还在不在。另外,这种问题,并非是可以、不行就简单回答的,背后很细致的考量,用有限的文字根本说不清楚。
这名认真学习、主动思考的学员,此时需要的是在学习方法上的改进。这是比搞懂某算法细节更重要的事。行不行?有没有影响?运行并测试程序一验证就见分晓。算法一处改动,往往别处也得有动作,更具价值的“改算法”学习环节,立刻就可以实施。
于是,有了下面的指导语——
【答复】
你学得很细,我特别欣赏。你在学习过程中,能主动思考并且想到的问题也都在点上,这又是一个非常难得的学习品质。回答你“行不行”、“可以吗”的问题,实际上,我基本都会告诉你可以,背后是,算法的其他位置处也需要给出更改。所以,在“可以”或“不可以”的后面,我们关注的真正核心是这个地方改了以后,其他地方如何随之变化。在算法学习过程中,“理解已有的算法”是基本的层次,而你的学习就此可以进入“改写已有算法”的层次。鉴于网络学习的特点,我不可能给你实时的指导,我更愿意借此让你在方法上更进一步,将这种“改写”发展到极致,促进你综合能力的提高。
具体做法是,在看视频的过程中,将这些疑点记录下来,而后,通过上机调试算法的实现代码并进行测试,这样下来,这类的问题将自主解决,价值远甚于现在的方式。 你可以到课程主页中去,那里有所有的章节的算法实现源代码,以及附加的实践项目。
利用这些资源,你可以方便地按上面的方法开展学习。 你还可以点链接…,进入后点学生名字中的链接,看我在学校教学中我的学生的学习情况,他们在我的面授指导和组织下,也在用同样的资源和方案学习,很显然,你这名网络学生也按同样的进程就可以学下去。
相信你这样能将数据结构学得更加扎实!