1. 这个环形链表有个恒定不变的head,head->data表示链表中的元素个数,缺点在于每删除head->next,要把head->next=head->next->next
  2. 要有习惯写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_环形双向链表相关推荐

  1. 带哨兵的环形双向链表

    /**带哨兵的环形双向链表*具有对链表的插入 浏览 删除的功能*Author: StoryMonster*Last Change Date: 2016/6/22*/#include <iostr ...

  2. Linux (x86) Exploit 开发系列教程之十一 Off-By-One 漏洞(基于堆)

    Off-By-One 漏洞(基于堆) 译者:飞龙 原文:Off-By-One Vulnerability (Heap Based) 预备条件: Off-By-One 漏洞(基于栈) 理解 glibc ...

  3. Linux内核链表实现剖析

    Linux内核使用环形双向链表,无所谓头结点和尾节点. 内核链表详细信息见 include/ linux / list.h . 1. 定义和初始化内核链表 struct list_head { str ...

  4. live555 源码分析:基础设施

    live555 由多个模块组成,其中 UsageEnvironment . BasicUsageEnvironment 和 groupsock 分别提供了事件循环,输入输出,基本的数据结构,以及网络 ...

  5. React Fiber源码逐个击破系列-scheduler

    Scheduler是React中相对独立的模块,用于实现类似浏览器requestIdleCallback的功能.也是React16实现time slicing最核心的一个模块. 在我阅读React源码 ...

  6. 终于,我读懂了所有Java集合——map篇(多线程)

    多线程环境下的问题 1.8中hashmap的确不会因为多线程put导致死循环(1.7代码中会这样子),但是依然有其他的弊端,比如数据丢失等等.因此多线程情况下还是建议使用ConcurrentHashM ...

  7. 终于,我读懂了所有Java集合——map篇

    首先,红黑树细节暂时撸不出来,所以没写,承诺年前一定写 HashMap (底层是数组+链表/红黑树,无序键值对集合,非线程安全) 基于哈希表实现,链地址法. loadFactor默认为0.75,thr ...

  8. [内核摘要] 虚拟文件系统

    Linux支持多种文件系统类型的方式和其他类Unix系统类似,通过虚拟文件系统来实现. 对每个读,写或其他操作文件系统的调用函数,内核都用实际支持各种文件系统的函数来代替. 12.1 虚拟文件系统(V ...

  9. Windows高精度微秒级(并发)定时器实现

    自从上次封装微秒延时函数后,利用空闲时间试着封装一个微秒定时器(类似MFC定时器形式)使用起来效果还不错. 关于定时器的几点介绍:    1.设计采用了自动释放定时器节点方式(增加虚析构函数在内部做相 ...

最新文章

  1. MyBatis学习笔记(六)动态sql
  2. 日常检查IBM P系列小型机状态的项目及其相关命令
  3. hihoCoder #1457 : 后缀自动机四·重复旋律7
  4. 提高数据库处理查询速度
  5. c语言自由存储区,C/C++ 内存分区以及自由存储区和堆的区别
  6. HTML和CSS面试题
  7. oracle防止绿盟扫描,Oracle认证:Oracle避免全表扫描方式
  8. PHP代码审计工具Rips的使用
  9. c#学习笔记---BackgroundWorker 详解
  10. java工程师怎么找兼职,快来看鸭~
  11. python使用selenium + PhantomJs搭建的简单漫画爬虫工具
  12. python加数据库_python向数据库添加数据(添加一条数据)
  13. 详细说明VScode设置中文,主题更改,文件图标及字体设置
  14. Integer对象的大小比较
  15. Redis在京东到家的订单中的使用
  16. 主流币仍被摁在地上摩擦,平台币已扬起一场美丽的春梦
  17. 舒尔特方格训练注意力游戏 | 舒尔特Pro
  18. poj题目分类 [转载于=小媛在努力原创]
  19. 微信小程序开发之全屏显示
  20. 基于三维时空卷积网络的自监督点云预测(CoRL2021)

热门文章

  1. 释放锁以及添加线程对于队列的变化
  2. 为什么需要用户自定义类加载器及具体实现
  3. HDFS的API操作-访问权限问题
  4. elasticsearch客户端介绍
  5. 单继承-继承的传递性
  6. 字典-字典和列表组合的应用场景
  7. 索引创建以及优化_1
  8. 计算机刷帖知识点,09计算机408分(沙滩帖)
  9. Java 中的线程安全的类
  10. freemodbus源码/获取地址