Linklist遍历问题

2019-03-28  本文已影响0人  employeeeee

昨天晚上跟同事吃饭的时候 说道之前面试的时候 面试官问他的一个问题 在遍历linklist的时候 使用for(i=0;i<linklist.size();i++) 这种方式来遍历的时候 会不会报错 当时想了一下 因为linklist的底层也不是数组 是链表 再怎么也不会出现index下标的报错.当时是觉得不会报错的 然后早上来了就测试了一下

定义了一个接口
package dao;

import model.Hero;

/**
 * @author employeeeee
 * @Descriotion:
 * @date 2019/3/28 8:48
 */
public interface Stack {
    //把英雄推入到最后位置

    public void push(Hero h);

    //把最后一个英雄取出来

    public Hero pull();

    //查看最后一个英雄

    public Hero peek();

    //获取当前链表的长度
    public int getSize();
}

接口的实现类
package dao;

import model.Hero;

import java.util.LinkedList;

/**
 * @author employeeeee
 * @Descriotion:
 * @date 2019/3/28 8:49
 */
public class MyStackImpl implements Stack {

    LinkedList<Hero> heroes = new LinkedList<>();

    @Override
    public void push(Hero h) {
        heroes.addLast(h);
    }

    @Override
    public Hero pull() {
        Hero hero = heroes.removeLast();
        return hero;
    }

    @Override
    public Hero peek() {
        Hero last = heroes.getLast();
        return last;
    }

    @Override
    public int getSize() {
        int size = heroes.size();
        return size;
    }
}
测试类
package testclass;

import dao.MyStackImpl;
import dao.Stack;
import model.Hero;

/**
 * @author employeeeee
 * @Descriotion:
 * @date 2019/3/28 8:53
 */
public class StackTest {
    public static void main(String[] args) {
        MyStackImpl myStack = new MyStackImpl();
        for (int i=0;i<5;i++){
            Hero hero = new Hero("英雄" + i);
            System.out.println("向栈中加入英雄"+ i);
            myStack.push(hero);
        }

        for (int i=0;i<myStack.getSize();i++){
            Hero peek = myStack.pull();
            System.out.println("peek出栈" + peek);
        }
    }
}

然后运行后 发现没有报错 但是遍历出来的数据是不全的 就像是这样


image.png

然后就想了一下 linklist查询的时候 是会把list中最后一个数据取出来 并从list中删掉 那么list的size是减少1的 所以就相当于i从0开始加 而size在从size开始减 当他们遇到中间值得时候 那么就停止了循环
所以需要修改一下for循环的代码
改为

  for (int i=0;i<myStack.getSize();i+=0){
            Hero peek = myStack.pull();
            System.out.println("peek出栈" + peek);
        }

这样就可以将linklist中的数据都遍历出来了


image.png
上一篇 下一篇

猜你喜欢

热点阅读