链表(裸题)
来源:互联网 发布:淘宝用卷怎么用 编辑:程序博客网 时间:2024/06/05 20:39
Doubly Linked List Aizu - ALDS1_3_C
Your task is to implement a double linked list.
Write a program which performs the following operations:
- insert x: insert an element with key x into the front of the list
- delete x: delete the first element which has the key of x from the list
- deleteFirst: delete the first element from the list
- deleteLast: delete the last element from the list
Input
The input is given in the following format:
n
command1
command2
...
commandn
In the first line, the number of operations n is given. In the followingn lines, the above mentioned operations are given in the following format:
- insert x
- delete x
- deleteFirst
- deleteLast
Output
Print all the element (key) in the list after the given operations. Two consequtive keys should be separated by a single space.
Constraints
- The number of operations ≤ 2,000,000
- The number of delete operations ≤ 20
- 0 ≤ value of a key ≤ 109
- the number of elements in the list does not exceed 106
Sample Input 1
7insert 5insert 2insert 3insert 1delete 3insert 6delete 5
Sample Output 1
6 1 2
Sample Input 2
9insert 5insert 2insert 3insert 1delete 3insert 6delete 5deleteFirstdeleteLast
Sample Output 2
1
题目意思是指写一个支持插入元素,删除特定元素,删除头元素,删除尾元素,打印整条链表操作的链表。
下面是初始化操作:
然后是各种普通操作顺序:
在理解后就可以看代码了,本题为了快速的删除尾,所使用的是环型链表,上代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;struct Node{ int key; Node *prev; Node *next;};Node *head;Node *listSearch(int key){ Node *cur = head->next; while(cur != head && cur->key != key){ cur = cur->next; } return cur;}void init(){ head = new Node; head->prev = head; head->next = head;}void printlist(){ Node *cur = head->next; int isf = 0; while(1){ if(cur == head)break; if(isf++ > 0)printf(" "); printf("%d",cur->key); cur = cur->next; } printf("\n");}void insert(int key){ Node *x = new Node; x->key = key; x->next = head->next; head->next->prev = x; head->next = x; x->prev = head;}void deleteNode(Node *t){ if(t == head)return; t->prev->next = t->next; t->next->prev = t->prev; free(t);}void deleteFirst(){ deleteNode(head->next);}void deleteLast(){ deleteNode(head->prev);}void deletekey(int key){ deleteNode(listSearch(key));}int main(){ int key,n,i; char com[20]; scanf("%d",&n); init(); for(i = 0;i < n; i++){ scanf("%s%d",com,&key); if(com[0] == 'i'){insert(key);} else if(com[0] == 'd'){ if(strlen(com) > 6){ if(com[6] == 'F')deleteFirst(); else if(com[6] == 'L')deleteLast(); } else{ deletekey(key); } } } printlist(); return 0;}
0 0
- 链表(裸题)
- 线段树(裸题)
- 栈(裸题)
- 队列(裸题)
- 裸题
- 裸题
- 裸题
- 裸题
- 假日的宿舍(裸题)
- [wikioi2930]填报志愿(裸题)
- LightOJ 1019 (FLoyd裸题)
- hdu1754(线段树)(裸题)
- Romantic(扩展欧几里得求逆元(裸题))
- hdu 3555(数位dp裸题)
- POJ 1789 Truck History (prime_裸题)
- poj3264 Balanced Lineup(RMQ裸题)
- POJ1287Networking(最小生成树,裸题)
- POJ3461:Oulipo(MP,KMP裸题)
- Hadoop浅学习&实践学习——初级1[单机|伪分布集群]
- nginx使用ngx_lua访问后端Thrift-Server实现和介绍
- c++中静态成员变量要在类外部再定义,否则产生link2001错误.
- thinkphp---display与fetch区别
- Error: No resource found that matches the given name (at 'layout_toLeftOf' with value '@id/p
- 链表(裸题)
- tabcontrol 自绘
- Android之ListView的getItemViewType和getViewTypeCount
- 第三课 表达式
- 2015.12.23阿里云纪要
- Excel Sheet Column Number
- React配合Webpack构建项目
- 四、朴素贝叶斯法--统计学习方法总结
- left join,rignt join,inner join的区分