重写Linkedlist类,改写为MyLinkedList,未继承Iterable类。
public class MyLinkedList<AnyType>  {
private int theSize;
private Node<AnyType> beginMarker;
private Node<AnyType> endMarker; private static class Node<AnyType>{ //定义匿名类Node
public Node(AnyType d,Node<AnyType> p,Node<AnyType> n){
this.data=d;
this.prev=p;
this.next=n;
}
public AnyType data;
public Node<AnyType> prev;
public Node<AnyType> next;
} public MyLinkedList(){ //构造方法
beginMarker=new Node<AnyType>(null,null,null);
endMarker=new Node<AnyType>(null,beginMarker,null);
beginMarker.next=endMarker;
theSize=0;
} public int size(){ //单链表cdu
return theSize;
} public boolean isEmploy(){ //判断长度
return size()==0;
} public Node<AnyType> getNode(int idx){ //返回idx对应的结点
Node<AnyType> p;
if(idx<0||idx>size())
throw new IndexOutOfBoundsException( );
if(idx<size()/2){
p=beginMarker.next;
for(int i=0;i<idx;i++)
p=p.next;
}
else{
p=endMarker;
for(int i=size();i>idx;i--)
p=p.prev;
}
return p;
} public AnyType get(int idx){ //返回idx位置的数据
return getNode(idx).data;
} public AnyType set(int idx,AnyType newVal){
Node<AnyType> p=getNode(idx);
AnyType oldVal=get(idx);
p.data=newVal;
return oldVal;
} public boolean add(AnyType x){ //插入元素
add(size(),x);
return true;
}
private void addBefore(Node<AnyType> p,AnyType x){
Node<AnyType> newNode=new Node<AnyType>(x,p.prev,p);
newNode.prev.next=newNode;
p.prev=newNode;
theSize++;
}
public void add(int idx,AnyType x){
Node<AnyType> p;
p=getNode(idx);
addBefore(p,x);
} public AnyType remove(int idx){ //删除元素
return remove(getNode(idx));
}
public AnyType remove(Node<AnyType> p){
p.next.prev=p.prev;
p.prev.next=p.next;
theSize--;
return p.data;
} public static void main(String[] args) {
//验证部分
MyLinkedList<String> La=new MyLinkedList<String>();
La.add("aaa");
La.add("bbb");
La.add("ccc");
La.add("ddd");
La.add("eee");
for(int i=0;i<La.size();i++){
System.out.println(i+": "+La.getNode(i).data);
}
System.out.println("......................");
La.add(2,"fff");
La.remove(0);
La.set(4,"ggg");
for(int i=0;i<La.size();i++){
System.out.println(i+": "+La.get(i));
}
} }

最新文章

  1. 《征服 C 指针》摘录3:数组 与 指针
  2. 将光标放到input内容的最后
  3. VS2012添加PlaySound引用
  4. 水流雨渍shader
  5. JMeter性能测试介绍学习一
  6. Zabbix实现告警分级
  7. WP布局之Pivot和Panorama
  8. 今天分享一个抽奖的类Lottery
  9. C# PLINQ 内存列表查询优化历程
  10. Git教程(10)git比较复杂的功能
  11. getchar()与EOF
  12. Linux发展历史大事编年表(截止2013年)
  13. jQuery API 中文文档
  14. OC实现单选和多选按钮
  15. linux子系统折腾记 (二)
  16. hook NtTerminateProcess进行应用的保护
  17. java求解第N个素数(质数)
  18. Java分割ID和姓名(String不能当输出参数)
  19. Python作业第一课
  20. 使用exundelete在Linux下恢复删除的文件

热门文章

  1. 【C#遗补】之Char.IsDigit和Char.IsNumber的区别
  2. uboot启动阶段修改启动参数方法及分析
  3. SVN的switch命令
  4. 处理json中影响解析的多余引號
  5. C#-gdi画图,双缓冲画图,Paint事件的触发---ShinePans
  6. Linux下OpenCV的环境搭建(转)
  7. Android 自己实现 NavigationView [Design Support Library(1)]
  8. Java的内存泄漏和垃圾回收机制
  9. 21天教你学会C++
  10. ReactNavtive框架教程(2)