读代码 vs 画图推:学链表到底哪种方式更靠谱

最近在啃数据结构,链表那块反复卡壳。我试了两种学法:一种是对着教材一行行读代码,一种是自己拿纸笔画节点一个个推。两套路径走下来,效果差得不是一星半点。

这篇就来对比一下"读代码"和"画图推"这两种学法,说说到底哪个更顶用。

先说读代码这条路

我一开始习惯对着教材读代码,就是那种逐行看注释、试图理解每行在干嘛的方式。教材上写得挺清楚——typedef struct、malloc分配内存、node->next = NULL,每行都看得懂。看完之后合上书,感觉"嗯,大概明白了"。

但一做题就露馅。比如翻转链表这道经典题,读的时候觉得逻辑很顺:三个指针,prev、curr、next,循环里逐步翻转。可自己一写,next指针到底什么时候赋值、循环终止条件是curr还是curr->next,脑子里全是浆糊。

问题出在哪?读代码本质是在走别人铺好的路,每一步都有人替你解释了为什么这么做。但数据结构的难点不在"这行代码什么意思",而在"这个指针指向哪里、结构怎么变化的"。你的大脑在处理文字信息,但链表这种结构本质上是空间关系,文字描述天然隔了一层。

认知心理学里有个概念叫"表征",就是说同一件事用不同信息载体去理解,效率差很大。1992年Sweller提出认知负荷理论(Cognitive Load Theory),核心观点之一是:当问题本身是空间结构时,用文字去理解会增加额外的"表征转换"负担,让你本来就有限的认知带宽更紧张[1]。链表就是这么个东西——它是空间的、是拓扑的,不是线性的。

再说说画图推这条路

后来我换了方法,拿纸和笔,画节点。每个节点画个方框,标上数据和next指针,然后用箭头连起来。翻转链表的时候,我拿铅笔一个一个地擦箭头、改指向,手眼并用往前推。

第一遍画得乱七八糟,箭头擦了又画。但到第三遍,突然就通了——原来翻转的本质就是:每个节点的next指针掉头指向前一个节点,而你需要一个临时变量先存住原来的next,否则改完就找不到后面了。这个"为什么需要临时变量"的道理,我读代码读了三遍都没真正理解,画图三遍就懂了。

更有意思的是,画完之后再回去看代码,那几行malloc和指针赋值突然变得"自然"了。不是因为我背住了代码,而是因为脑子里已经有了结构变化的画面,代码只是这个画面的文字翻译而已。

读代码 vs 画图推:学链表到底哪种方式更靠谱

这不是玄学。2003年Tversky的研究指出,人在处理空间关系时,外部表征(画图)能显著减轻工作记忆负担——你不用在脑子里同时记住"当前指针在哪""下一个节点是谁""改完之后指向哪"这三件事,纸替你分担了存储压力[2]。你的注意力可以集中到"这个操作对不对"上面,而不是全花在"记住当前状态"上。

两条路到底差在哪

对比下来,核心区别就一条:读代码是"跟着结果走",画图是"跟着过程走"。

读代码的时候,代码已经是别人写好的最终产物。你看到的是"正确答案",但没看到那些被删除的试错过程。你的大脑被迫接受一个逻辑,却没有机会自己走一遍弯路。这就好比看导航开车和不开导航自己认路的区别——导航能让你到目的地,但你对路线的记忆远不如自己走错又找回来的那次深刻。

画图推就不一样。画错箭头、指错节点,这些"错误"本身是学习的一部分。神经科学里管这个叫"生成效应"(generation effect)——自己动手生成的东西,比被动接收的记得更牢。Slamecka和Graf在1978年的实验里就发现,让被试自己造句子比让他们读现成句子,后续记忆表现高出约20%[3]。自己画链表节点的时候,你是在"生成"结构,而不是"接收"描述。

但我不想把画图吹成万能药。它的问题也明显:慢,而且容易陷在细节里。画了半天才发现自己一开始方向理解反了,白费功夫。所以我现在的方式是先读一遍代码建立大框架,再画图把细节走通。两种方法配合,不是一个完全替代另一个。

给同样在学数据结构的人的建议

如果你和我一样,读代码觉得"看懂了"但做题就懵,试试把手放在纸上而不是键盘上。不用画得多好看,方框和箭头就行。关键是让手参与进来——因为手在画的时候,你的大脑被迫把模糊的"大概理解"变成精确的"这个指针指向谁"。那个从模糊到精确的转换,恰恰是理解发生的地方。

数据结构这门课,最终考的不是你会背多少行代码,而是你脑子里有没有那个结构。而结构这个东西,画出来比读出来靠谱太多。

引用来源:
[1] Sweller, J. (1988). Cognitive load during problem solving. Cognitive Science, 12(2), 257-285.
[2] Tversky, B. (2003). Structures of mental representations of narratives. Educational Psychologist, 38(2), 99-106.
[3] Slamecka, N. J., & Graf, P. (1978). The generation effect: Delineation of a phenomenon. Journal of Experimental Psychology: Human Learning and Memory, 4(6), 592-604.

相关推荐

错题本到底有没有用?我说点大实话

前两天刷到一个帖子,标题大概是"错题本是我高考逆袭的关键",底下评论区炸了,几百条都在问怎么整理、用什么本子、按科目分还是按错因分。我看着那些评论,突然觉得有点恍惚——因为我也有过好几个错题本,但它们 ...

朝三暮四

庄子《齐物论》:劳神明为一而不知其同也,谓之朝三。何谓朝三?狙公赋芧曰:“朝三而暮四”。众狙皆怒。曰:“然则朝四而暮三”。众狙皆悦。名实未亏而喜怒为用,亦因是也。是以圣人和之以是非而休乎天钧,是之谓两 ...

三个和尚

从前有一座山,山上有一座破庙,庙里住着一个小和尚,他每天挑水、念经、敲木鱼,除此之外就是给菩萨案桌上的水瓶添水,夜里不让老鼠来偷东西,就这样每天的生活过得安稳自在。 不久,庙里又来了一个高和尚,这 ...

暂无评论

发表评论