错题本之<数据结构>

  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)查找容易;

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

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

相关推荐
袁雅倩19979 小时前
当吸尘器、筋膜枪都用上Type-C,供电方案该怎么选?浅谈PD取电芯片ECP5702的应用
c语言·开发语言·支持向量机·动态规划·推荐算法·最小二乘法·图搜索算法
夏日听雨眠9 小时前
数据结构(栈和队列)
数据结构
流年如夢12 小时前
栈和列队(LeetCode)
数据结构·算法·leetcode·链表·职场和发展
CHANG_THE_WORLD14 小时前
C语言中的 %*s 和 %.*s 和C++的字符串格式化输出
c语言·c++·c#
消失的旧时光-194314 小时前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
2501_9318037515 小时前
Go:一门为解决C语言痛点而生的现代语言
c语言·开发语言·golang
qeen8715 小时前
【数据结构】二叉树相关经典函数C语言实现
c语言·数据结构·c++·笔记·学习·算法·二叉树
良木生香16 小时前
【C++初阶】STL——List从入门到应用完全指南(1)
开发语言·数据结构·c++·程序人生·算法·蓝桥杯·学习方法
richard_yuu17 小时前
数据结构|二叉树高阶进阶-经典算法
数据结构·c++·算法
不知名的忻17 小时前
Dijkstra算法(朴素版&堆优化版)
java·数据结构·算法··dijkstra算法