封装链表
1、单链表:之前没封装的单链表,尾添加效率低,非法位置的判断效率低
节点:
数据域:
指针域:
单链表结构:
头指针(带头节点):
尾指针:
节点数量:
2、静态链表
节点:
数据域:
游标:
静态链表的节点存储在连续的内存中,通过游标来访问下一个节点
这种链表没有指针域,需要在插入或删除时,通过修改游标的值完成,而不需要动态申请、释放内存,但是也可以实现链式的效果
但是它牺牲了随机访问的功能,而且也缺少真正链表的全部优点
3、循环链表
链表的最后一个节点的next不再指向NULL,而是指向头,这种链表称为单向循环链表,简称循环链表,它的优点是可以
通过任意节点遍历整个链表
4、双向循环链表
节点:
前趋指针:
数据:
后继指针:
链表结构:头指针(带头节点)、节点数量
注意:双链表不需要尾指针,头的prev就是尾指针
优点:1、从任意节点开始都可以遍历整个链表
2、当已知节点的位置,可以根据情况选择从前到后或者从后到前进行遍历,
以此提高链表的访问效率
关于链表常考的笔试题:
1、单链表逆序,是在原基础上
// 将链表逆序
void reverse_list(List* list)
{
Node *prev = NULL;
Node *curr = list->head->next;
Node *next;
list->tail = curr; // 更新尾指针
while (curr != NULL)
{
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
list->head->next = prev; // 更新头指针
}
2、找出单链表中的倒数第n个节点
3、判断单链表中是否有环
4、找出环形单链表中的环的入口
5、合并两个有序链表,合并后依然有序
6、判断两个链表是否是Y型链表