如问题中所用,它是单个链表的变体,其中数据保存在一个数组中,下一个元素的索引保存在第二个数组中。
Wiki 文章包括这种变体,结合了它的链表(节点数组)和并行数组文章(其中索引保存在单独的数组中):
https://en.wikipedia.org/wiki/Linked_list#Linked_lists_using_arrays_of_nodes
https://en.wikipedia.org/wiki/Parallel_array
问题代码中,a[]包含数据,link[]包含a[]的下一个元素的索引,link[0]用作head索引,其中包含a[]的第一个元素的索引.在问题的代码中没有使用 a[0],所以对于 n 个元素,两个数组大小都是 n+1。
在我对那个问题的回答中,我在 link[] 之外使用了一个单独的变量作为 head 索引,这样两个数组大小都是 n,类似于 wiki 文章,它称之为 listHead。
最终结果类似于单链表,插入或删除只需要更改link[]中的两个索引(其中一个可以是listHead),而不必旋转数组的一部分。
维基解释为什么要这样做是针对不支持指针、引用......,并且不支持记录(类、结构......)的编程语言。