在C中实现单个链表时,我认为有三种方法:
标头是指向链表第一个节点
ITSELF.IT 指针。1.全局声明标头并使用函数void insert(int)
插入。这应该工作,因为标头是全局的。
2.在main
内声明标头,并使用函数node*insert(node*)
插入。由于涉及回报,这应该有效。
3.在main
内声明标头并使用函数void insert(node**)
插入。
有时,即使不涉及回报,第二种方法也有效。为什么?
哪种方法更好?
如果所涉及的函数是递归的,如树中,哪种方法合适?
应将数据结构封装在单个对象(头节点或包含它的结构)中,然后可以让函数处理该对象。这意味着你可以在程序中有多个链表(不适用于全局头节点),你也可以把它传递给想要使用它的不同函数(没有数据结构而不能使用它)。
如果将单个对象(头节点)存储在程序中,则插入和删除函数不需要返回任何内容,因为您已经有一个指向表示链表的对象的指针。
如果所涉及的函数是递归的,如树中,哪种方法合适?
这些函数不应该是递归的"就像在树中一样"。树的深度是 O(logn),这意味着递归在许多情况下是合理的;链表的大小为 O(n),这意味着递归很容易溢出堆栈。