LinkedList重写(2)LinkedList 增加get()方法,节点遍历

package Study.Collection;


/**
 * <p>Description: </p>
 * 增加get()方法,结点遍历
 * @author zhangyan
 * @date 2018/12/20 15:37
 */
public class YanLinkedList01 {

    private   Node  first;
    private   Node  last;

    private  int size;

    public  Object  get(int index) {

        //判断索引是否在范围内
        if(index<0||index>size-1){
            throw  new RuntimeException("索引数字不合法:"+index);
        }
        Node  temp = null;


        //如果index在前半部分,就从头开始找
        if(index<=(size>>1)){   //size>>1相当于除以2
            temp = first;       //从first结点开始
            for(int i=0;i<index;i++){
                temp = temp.next;
            }
        }else{                         //如果index在后半部分,就从最后一个开始找
            temp = last;               //从last结点开始
            for(int i=size-1; i>index;i--){
                temp = temp.previous;
            }
        }

        //返回对应的结点的值
        return temp.element;
    }



    public  void  add(Object  obj) {
        Node  node  = new Node(obj);

        if(first==null){

            first = node;
            last = node;
        }else{

            node.previous = last;
            node.next = null;

            last.next = node;
            last = node;

        }

        size++;


    }

    @Override
    public String toString() {
        //[a,b,c]     first=a,    last=c
        //a,b,c
        StringBuilder   sb = new StringBuilder("[");
        Node  temp = first;
        while(temp!=null){
            sb.append(temp.element+",");
            temp = temp.next;
        }
        sb.setCharAt(sb.length()-1, ']');

        return sb.toString();
    }

   //测试
    public static void main(String[] args) {
        YanLinkedList01  list = new YanLinkedList01();

        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        list.add("f");

        System.out.println(list.get(5));


    }
}

解释:get()方法实现的思路是,根据索引值遍历链表,然后返回对应的节点值。
当然遍历链表有一个优化算法在里面,就是对索引index进行判断,如果在前半部分就在前半部分遍历链表,如果在后半部分就在后半部分遍历链表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值