算法珠玑——双指针(3)
算法珠玑——双指针(3)

这个思路挺简单的,但竟然有这么多人都想不到。
class Solution {
public:
ListNode* middleNode(ListNode* head) {
/*
基本情况:fast(1) = head;
head(1) = head;
*/
ListNode* fast = head;
/*
终止情况:fast 和 fast->next 存在 nullptr。
这样,就没有fast->next->next。
*/
while(fast && fast->next)
{
/*
归纳步骤: fast(n) = fast(n+2)
head(n) = head(n+1)
*/
head = head->next;
fast = fast->next->next;
}
return head;
}
};
这题倒有两个归纳步骤。
还有就是,基于链表的操作,使得其不具有随机存储(Random Access)的特性。
链表变得对计算机栈结构有了更少的依赖,从而丧失了数组的一些特性。
题外话:
真希望高一时学C语言时的我看到现在的程序,我也能把这些东西都教给他,而不是看国内的那些烂书。
那时候计算机语言对我来说就是魔法,初三还学了ruby那些语言呢。
现在看了都真的搞笑。
希望国内以后的年轻人们,能为这一领域做出更好的贡献吧。年轻人才是这个中国的希望。

浙公网安备 33010602011771号