错题本之<数据结构>

  1. 已知指针 p 指向单向不循环链表中的某一个节点,且不知道头结点。
    问:如何删除 p 指向的节点?

答:

如果 p 指向的不是最后一个节点

定义一个指针 q 保存 p->next; 然后将 q 的数据域和指针域都覆盖到 p 指向的节点中

最后释放 q 指向的节点即可。

q = p->next;

p->data = q->data;

p->next = q->next;

free(q);

q = NULL;

如果 p 指向的是最后一个节点了,就只能free(p)了,且没法修改倒数第二节点的指针域了

  1. 问:如何通过一趟遍历找到单向不循环链表的中点?

答:可以通过 快慢指针 实现

定义两个指针 p q 都指向链表开头

然后开始循环, p每次走2步,q每次走1步

当 p 走到结尾时,q 指向的就是链表的中点

//如果是代码实现 要注意 得保证 p->next 不是NULL 才能取 p->next->next

while(NULL != p || NULL != p->next){

p = p->next->next;

q = q->next;

}

  1. 顺序表(数组)和链表有什么区别?

答: 链表增删容易,O(n)查找难

顺序表增删难,O(1)查找容易;

顺序表需要提前确定长度,扩展空间难度较大

链表用多大空间就申请几个空间,扩建难度低

相关推荐
D_FW4 分钟前
数据结构第五章:树与二叉树
数据结构·算法
余瑜鱼鱼鱼23 分钟前
Java数据结构:从入门到精通(九)
数据结构
float_六七26 分钟前
设备分配核心数据结构全解析
linux·服务器·数据结构
wifi chicken2 小时前
Linux 内核开发之单链表的增删查改详解
linux·数据结构·链表
willingli3 小时前
c语言经典100题 61-70题
c语言·开发语言·算法
im_AMBER3 小时前
数据结构 18 【复习】广义表 | 各种内部排序 | 二叉排序树的平均查找长度 ASL
数据结构·笔记·学习·排序算法
leaves falling6 小时前
冒泡排序(基础版+通用版)
数据结构·算法·排序算法
l1t6 小时前
在arm64 Linux系统上编译tdoku-lib的问题和解决
linux·运维·服务器·c语言·cmake
C雨后彩虹6 小时前
无向图染色
java·数据结构·算法·华为·面试
secondyoung6 小时前
Git使用:rebase用法
c语言·经验分享·git·vscode