EOJ_1007_环形双向链表
- 这个环形链表有个恒定不变的head,head->data表示链表中的元素个数,缺点在于每删除head->next,要把head->next=head->next->next
- 要有习惯写newNode
#include <bits/stdc++.h>
using namespace std;
//link的head->data=n结点的个数
//虽然是双向,但是并没有用到双向
//不过在删除的时候可以用到,可以直接找要删除的元素
typedef struct node
{int data;node* next;node* pre;
}node;node* newNode(int i)
{node* tmp = new node;tmp->data = i;tmp->next=NULL;tmp->pre=NULL;return tmp;
}node* creatLink(node* head)
{head = newNode(0);//head->data链表元素有多少个node* p = head;while(1){int num;cin>>num;if(num==-1) break;node* tmp = newNode(num);p->next = tmp;tmp->pre = p;p = p->next;(head->data)++;}if(head->next==NULL) {return head;}p->next = head->next;//前面一直是构造非环形链表,最后构造完后再把尾指针指向头指针即可head->next->pre = p;return head;
}node* deleteLink(node* head)
{while(1){node* p = head->next;int num;cin>>num;if(num==-1) break;int flag=1;int deletenum = head->data;for(int i=0;i<deletenum;i++){if(p->data==num){if(p==head->next){head->next=p->next; //当要删除的元素是head->next时,还要把head->next修改//要注意判断条件不能只是i==0,因为当i==1,2...的时候,也可能会删除head->next的元素}p->next->pre = p->pre;p->pre->next = p->next;flag=0;(head->data)--;}p=p->next;}if(flag) cout<<-1<<endl;}return head;
}void print(node* head)
{if(head->data==0) return;node* p = head->next;for(int i=0;i<(head->data);i++){cout<<p->data<<" ";p = p->next;}
}int main()
{node* head;head = creatLink(head);head = deleteLink(head);print(head);return 0;
}
EOJ_1007_环形双向链表相关推荐
- 带哨兵的环形双向链表
/**带哨兵的环形双向链表*具有对链表的插入 浏览 删除的功能*Author: StoryMonster*Last Change Date: 2016/6/22*/#include <iostr ...
- Linux (x86) Exploit 开发系列教程之十一 Off-By-One 漏洞(基于堆)
Off-By-One 漏洞(基于堆) 译者:飞龙 原文:Off-By-One Vulnerability (Heap Based) 预备条件: Off-By-One 漏洞(基于栈) 理解 glibc ...
- Linux内核链表实现剖析
Linux内核使用环形双向链表,无所谓头结点和尾节点. 内核链表详细信息见 include/ linux / list.h . 1. 定义和初始化内核链表 struct list_head { str ...
- live555 源码分析:基础设施
live555 由多个模块组成,其中 UsageEnvironment . BasicUsageEnvironment 和 groupsock 分别提供了事件循环,输入输出,基本的数据结构,以及网络 ...
- React Fiber源码逐个击破系列-scheduler
Scheduler是React中相对独立的模块,用于实现类似浏览器requestIdleCallback的功能.也是React16实现time slicing最核心的一个模块. 在我阅读React源码 ...
- 终于,我读懂了所有Java集合——map篇(多线程)
多线程环境下的问题 1.8中hashmap的确不会因为多线程put导致死循环(1.7代码中会这样子),但是依然有其他的弊端,比如数据丢失等等.因此多线程情况下还是建议使用ConcurrentHashM ...
- 终于,我读懂了所有Java集合——map篇
首先,红黑树细节暂时撸不出来,所以没写,承诺年前一定写 HashMap (底层是数组+链表/红黑树,无序键值对集合,非线程安全) 基于哈希表实现,链地址法. loadFactor默认为0.75,thr ...
- [内核摘要] 虚拟文件系统
Linux支持多种文件系统类型的方式和其他类Unix系统类似,通过虚拟文件系统来实现. 对每个读,写或其他操作文件系统的调用函数,内核都用实际支持各种文件系统的函数来代替. 12.1 虚拟文件系统(V ...
- Windows高精度微秒级(并发)定时器实现
自从上次封装微秒延时函数后,利用空闲时间试着封装一个微秒定时器(类似MFC定时器形式)使用起来效果还不错. 关于定时器的几点介绍: 1.设计采用了自动释放定时器节点方式(增加虚析构函数在内部做相 ...
最新文章
- MyBatis学习笔记(六)动态sql
- 日常检查IBM P系列小型机状态的项目及其相关命令
- hihoCoder #1457 : 后缀自动机四·重复旋律7
- 提高数据库处理查询速度
- c语言自由存储区,C/C++ 内存分区以及自由存储区和堆的区别
- HTML和CSS面试题
- oracle防止绿盟扫描,Oracle认证:Oracle避免全表扫描方式
- PHP代码审计工具Rips的使用
- c#学习笔记---BackgroundWorker 详解
- java工程师怎么找兼职,快来看鸭~
- python使用selenium + PhantomJs搭建的简单漫画爬虫工具
- python加数据库_python向数据库添加数据(添加一条数据)
- 详细说明VScode设置中文,主题更改,文件图标及字体设置
- Integer对象的大小比较
- Redis在京东到家的订单中的使用
- 主流币仍被摁在地上摩擦,平台币已扬起一场美丽的春梦
- 舒尔特方格训练注意力游戏 | 舒尔特Pro
- poj题目分类 [转载于=小媛在努力原创]
- 微信小程序开发之全屏显示
- 基于三维时空卷积网络的自监督点云预测(CoRL2021)