《算法(第四版)》1.3.31 双向链表
来源:互联网 发布:java软件测试 编辑:程序博客网 时间:2024/06/05 03:55
package Cap1;import java.util.Iterator;import edu.princeton.cs.introcs.StdOut;import edu.princeton.cs.introcs.StdRandom;public class DoubleNode<Item> implements Iterable<Item> {/** * @param args */private Node first=null, last = null;private class Node {Item item;Node prev,next;}public void push_front(Item item){Node node = new Node();node.item = item;if(first == null){first = node;last = node;}else{first.prev = node;node.next = first;first = node;}}public void push_back(Item item){Node node = new Node();node.item = item;if(last == null){first = node;last = node;}else{last.next = node;node.prev = last;last = node;}}public Item pop_back(){if(last == null) return null;else{Item item = last.item;last = last.prev;last.next.prev = null;last.next = null;return item;}}public Item pop_front(){if(first == null) return null;else{Item item = first.item;first = first.next;first.prev.next = null;first.prev = null;return item;}}private void remove(Node cur){if(cur==null) return;if(cur==first){first = first.next;first.prev = null;}else if(cur == last){last = last.prev;last.next = null;}else{cur.prev.next = cur.next;cur.next.prev = cur.prev;}cur.prev = null;cur.next = null;}public void remove(int k){Node cur = first;for(int i=1;i<k && cur!=null;i++){cur = cur.next;}remove(cur);}public void remove(Item item){Node cur;for(cur = first;cur!=null && cur.item!=item ;cur = cur.next);if(cur == null) return;remove(cur);}public void removeBefore(Item item){Node cur;for(cur = first;cur!=null && cur.item!=item;cur = cur.next); if(cur == null) return; // not find the noderemove(cur.prev); // delete the node before cur;}public void removeAfter(Item item){Node cur;for(cur = first;cur!=null && cur.item!=item;cur = cur.next);if(cur == null) return;remove(cur.next); // delete the node before cur;}@Overridepublic Iterator<Item> iterator() {// TODO Auto-generated method stubreturn new DoubleNodeIterator();}private class DoubleNodeIterator implements Iterator<Item>{private Node cur = first;@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn cur != null;}@Overridepublic Item next() {// TODO Auto-generated method stubItem item = cur.item;cur = cur.next;if(cur!=null){cur.prev.next = null;cur.prev = null;}return item;}@Overridepublic void remove() {// TODO Auto-generated method stub}}public static void main(String[] args) {// TODO Auto-generated method stubDoubleNode<Integer> dn = new DoubleNode<Integer>();for(int i=0;i<10;i++){dn.push_back(i*10);}dn.removeAfter(Integer.valueOf(80));dn.pop_front();dn.pop_back();for(Integer d : dn){StdOut.println(d);}}}
阅读全文
0 0
- 《算法(第四版)》1.3.31 双向链表
- 第四章:双向循环链表
- 《算法(第四版)》 1.3.29 环形链表
- 数据结构与算法python版(二)--双向链表
- 逢三退一(双向回环链表算法)
- 逢三退一(双向回环链表算法)
- 静下心来写算法(之双向链表)
- 数据结构与算法(双向链表)
- 算法第四版 练习1.3.31
- 算法(第四版) 1.3答案
- 《算法(第四版)》 习题:1.3.9
- 《算法(第四版)》 习题:1.3.14
- 《算法(第四版)》 习题:1.3.19
- 《算法(第四版)》 1.3.10 中序转后序
- 《算法(第四版)》 1.3.12
- 第四十八题 二叉搜索数与双向链表
- 数据结构与算法Java版——双向链表
- 算法(第四版)下载
- python代码高效经验
- 文档主题模型
- 我的第一天
- 详解spl_autoload_register()函数
- ForeSpider数据采集系统关键词配置方法
- 《算法(第四版)》1.3.31 双向链表
- 笔记本插上移动硬盘wifi就上不了网,除了供电问题,驱动冲突的可能更大。
- 解题报告:HDU_6169 Senior PanⅡ (记忆化搜索)
- 华为设计总监:如何做设计决策
- 【Hibernate】一对一映射
- 数据库常用函数总结(通用型)
- OPUS的入门指导
- git使用.gitignore忽略某些文件
- Android之ContentProvider总结