黑马程序员技术交流社区

标题: 自己写了一个简单的链表 求改进意见 [打印本页]

作者: xplcc    时间: 2014-10-2 12:29
标题: 自己写了一个简单的链表 求改进意见
不足之处,请指正
  1. /**
  2. * 创建一个链表结构
  3. */
  4. class MyList
  5. {  
  6.         private Cell head;//头部 ,第一个单元

  7.         //每个单元设定为一个类
  8.     private static class Cell
  9.     {
  10.                 Object data;//单元存储的数据
  11.                 Cell next;//记录下个节点
  12.     }
  13.        
  14.         //获取尾部的单元
  15.         private Cell getTail(){
  16.           
  17.            if(head==null)return null;
  18.            Cell p = head;
  19.            //循环得到最后一个单元
  20.            for(;;){
  21.              
  22.                   if(p.next==null) break;
  23.                   p = p.next;
  24.            }
  25.            return p;
  26.         }
  27.         //增加功能
  28.         public void add(Object data){
  29.            //创建一个新的单元
  30.            Cell p = new Cell();
  31.            //保存数据
  32.            p.data = data;
  33.            //将该单元挂到最后一个单元的尾部
  34.            if(head == null){
  35.              
  36.                   head = p;
  37.            }else{
  38.              
  39.                   Cell q = getTail();
  40.                   q.next = p;

  41.            }
  42.         }
  43.     //获取链表长度
  44.         public int size(){
  45.         int count = 0;
  46.             Cell p = head;
  47.                 for(;;){
  48.                    if(p==null) break;          
  49.                    p = p.next;
  50.                    count++;
  51.                 }
  52.             return count;
  53.         }
  54.     //获取指定位置数据
  55.         public Object get(int index){

  56.                 return getCell(index).data;
  57.         }
  58.     //获取指定位置的单元
  59.         private Cell getCell(int index){
  60.                 Cell p = head;
  61.                 if(index>=size() || index<0)
  62.                         throw new ArrayIndexOutOfBoundsException();//角标越界

  63.                 for(int i=0;i<index;i++){
  64.                   
  65.                    p = p.next;
  66.                 }
  67.             return p;
  68.         }
  69.     //删除
  70.         public void remove(int index){
  71.           
  72.            if(index==0){
  73.                    head = head.next;
  74.            }else{
  75.                    //获取删除单元的上一个单元
  76.                    Cell p1 = getCell(index-1);
  77.                    //获取当前要删除的单元
  78.                    Cell p2 = getCell(index);
  79.                    p1.next = p2.next;
  80.            }
  81.         }
  82.    //重写toString方法
  83.         public String toString(){
  84.           
  85.            StringBuffer sb = new StringBuffer("[");
  86.            Cell p = head;
  87.            for(;;){
  88.              if(p==null)break;
  89.                  sb.append(p.data);
  90.                  p = p.next;
  91.                  if(p!=null)sb.append(",");
  92.            }
  93.            sb.append("]");
  94.        return sb.toString();
  95.         }

  96.         public static void main(String[] args){
  97.        
  98.             MyList ml = new MyList();
  99.                 ml.add("java01");
  100.                 ml.add("java02");
  101.                 ml.add("java03");
  102.                 ml.add(345);
  103.                 //ml.add(new Person("青山", 23));
  104.                 //ml.add(new Person("巴赫", 34));
  105.                 System.out.println("Mylist:" + ml.toString() + "长度:" + ml.size());
  106.                 for(int i = 0;i<ml.size();i++){
  107.                   
  108.                    System.out.println("第" + (i+1) + "元素:" + ml.get(i));
  109.                 }
  110.                
  111.         }
  112. }
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2