删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)...

本文介绍了一种优化方法,通过一次遍历删除单项链表中的中间元素,避免了传统双指针法的两次循环。此算法在时间和空间效率上提供了改进,适合在链表操作中寻求优化的场景。
二、删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)
struct link
{
int data;
struct link *next;
};
void delMiddle(link *head)
{
if(head == NULL)
return;
else if(head->next == NULL)
{
delete head;
return;
}
else
{
link *low = head;
link *fast = head->next;
while(fast != NULL && fast->next != NULL)
{
fast = fast->next->next;
if(fast == NULL)
break;
low = low->next;
}
link *temp = low->next;
low->next = low->next->next;
delete temp;

}
}
int main()
{
struct link *head,*l;
struct link *s;
head = (link*)malloc(sizeof(link));
head->data=0;
head->next = NULL;
l = head;
for(int i=1; i<9; i++)
{
s = (link*)malloc(sizeof(link));
s->data = i;
s->next = NULL;
l->next= s;
l = l->next;
}
print(head);
delMiddle(head);
print(head);
return 0;
}
简易菜系统 功能要求 1. 初始状态:系统.上电后主菜显示以下内容(默认光标选中第1项) > Setting Mode System Info 2.按键操作 (所有操作通过外部中断触发) : 光标“>”示当前选中项; K1为“上翻键”、K2为“ 下翻键”、K3为“ 确认键”,每次按键操作蜂鸣器鸣一次。 K1按:光标上移一项;若在顶部项再上移则回到底项(循环滚动) ; K2按:光标下移一项;若在底部项再下移则回到顶项(循环滚动) ; K3按:进入对应子菜页面;蜂鸣器提示一次。 3.子菜 界面: 进入子菜后显示示例: 若选择‘Setting”, OLED显示: > P:1.00 l:0.50 D:0.10 < Return> 若选择‘'Mode',OLED显示: >Mode: Normal < Return > 得分细则(满分50分) 初始状态实现( 10分) : OL ED初始显示菜界面正常得10分。 按键操作( 20分) : K1为“上翻键”、K2为“下翻键”、K3为“确认键”,每个按键功能正常得5分,每次按键操作蜂鸣器反馈得5分,缺少光标扣5分。 子菜界面(15分) :按下K3后可以进入子菜界面得5分,可以从子菜界面选择Return按下确定返回主界面得10分。 调参功能(5分) :可以通过按键K3选中,K1,K2调节菜界面中的参数得5分。 在stm32中基于STM32F103C8T6,用代码编写,使用标准库,用上Delay函数,模块化编程,使用外部按键,配上接线图,k1接PA0,k2接PA2,k3接PA4,SCL接PB8,SDA接PB9,代码尽量简一点,包含.h和/c文件,不要有main.h
最新发布
11-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值