错题本之<数据结构>

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

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

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

相关推荐
似水এ᭄往昔18 分钟前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
程序员zgh25 分钟前
常用通信协议介绍(CAN、RS232、RS485、IIC、SPI、TCP/IP)
c语言·网络·c++
Bigan(安)1 小时前
【奶茶Beta专项】【LVGL9.4源码分析】08-theme主题管理
linux·c语言·mcu·arm·unix
了一梨1 小时前
外设与接口:按键输入 (libgpiod)
linux·c语言
TL滕1 小时前
从0开始学算法——第十六天(双指针算法)
数据结构·笔记·学习·算法
昔时扬尘处2 小时前
【Files Content Replace】文件夹文件内容批量替换自动化测试脚本
c语言·python·pytest·adi
天赐学c语言2 小时前
12.14 - 搜索旋转排序数组 && 判断两个结构体是否相等
数据结构·c++·算法·leecode
1024肥宅2 小时前
JavaScript 性能与优化:数据结构和算法
前端·数据结构·算法
仰泳的熊猫2 小时前
1112 Stucked Keyboard
数据结构·c++·算法·pat考试
芯联智造3 小时前
【stm32简单外设篇】- 28BYJ-48 步进电机(配 ULN2003 驱动板)
c语言·stm32·单片机·嵌入式硬件