美文网首页
Linklist遍历问题

Linklist遍历问题

作者: employeeeee | 来源:发表于2019-03-28 09:16 被阅读0次

昨天晚上跟同事吃饭的时候 说道之前面试的时候 面试官问他的一个问题 在遍历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

相关文章

  • Linklist遍历问题

    昨天晚上跟同事吃饭的时候 说道之前面试的时候 面试官问他的一个问题 在遍历linklist的时候 使用for(i=...

  • [LinkList/Tree]109. Convert Sort

    分类:LinkList/Tree 时间复杂度: O(nlogn) 因为每次都需要遍历linklist的一半 空间复...

  • 链表(C语言)

    LinkList.h LinkList.c

  • 单链表

    LinkList.h typedef void LinkList;typedef void LinkListNod...

  • 线性表--链表(C++)

    Node.h Node.cpp LinkList.h LinkList.cpp test.cpp

  • JavaSE基础知识学习-----集合之LinkList

    LinkList 概述 LinkList是List接口的实现类,与ArrayList不同的是,ArrayList采...

  • 链表,单链表

    关于链表的一些知识 ifndef LINKLIST_H define LINKLIST_H typedef voi...

  • linklist

    LinkedList 是一个类 实现的接口:List、Collection、Iterable、Seriali...

  • linkList

    有时觉得链表的首节点和其他节点导致的不同环境使代码非常复杂的,可以考虑在链表头处加一个dummy node, 这样...

  • Linklist

    大家好,我是IT修真院,一枚正直纯洁善良的如刚入门的Java程序员,今天试着给大家分享一下关于Linklist的内...

网友评论

      本文标题:Linklist遍历问题

      本文链接:https://www.haomeiwen.com/subject/nusfbqtx.html