错题本之<数据结构>

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

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

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

相关推荐
csdn_aspnet7 分钟前
C++ 霍尔分区算法(Hoare‘s Partition Algorithm)
数据结构·c++·算法
不知名的老吴7 分钟前
熟练掌握Python,可数据结构和算法还是很难?
数据结构
无限进步_9 分钟前
【Linux】进度条:行缓冲区、\r 与 fflush 的实战
linux·服务器·开发语言·数据结构·后端
郝学胜-神的一滴13 分钟前
力扣 144:二叉树前序遍历的优雅实现
java·数据结构·c++·python·算法·leetcode·职场和发展
FFZero118 分钟前
[mpv插件系统] (一) Lua 闭包与上值 — 从概念到 C API
c语言·junit·lua
秋越19 分钟前
从工程角度理解嵌入式C语言关键字
c语言·开发语言·嵌入式·嵌入式软件开发·嵌入式c语言·c语言关键字
郝学胜_神的一滴27 分钟前
力扣 144:二叉树前序遍历的优雅实现
数据结构·算法
zyl8372129 分钟前
Python 四大核心数据结构:列表、字典、元组、集合
数据结构·windows·python
超梦dasgg32 分钟前
Dijkstra(迪杰斯特拉)算法详解
java·数据结构·算法
代码地平线35 分钟前
C++ 入门篇类和对象·上篇:从本质深剖类与对象与C++基本用法
c语言·开发语言·数据结构·c++·笔记·算法