JAVA数据结构 - 链表面试题

一.获得单链表节点个数

  简单

public static int showHeadNumbers(HeroNode headNode) {
            HeroNode tmp = HeadNode;
            int count = 0;
            while (tmp.next != null) {
                count++;
                tmp = tmp.next;
            }
            return count;
        }

二.获得单链表倒数第n个节点

   1.获得倒数第index个节点信息  ,  倒数第一个就是正数的(总数-1).next个 倒数第二个就是正数的(总数-2).next

    所以使用for循环  到第 (总数-1) 个,然后取   (总数-1).next   即可

        public HeroNode getReciprocalHead(HeroNode headNode, int index) {
            if (headNode.next == null) {
                return null;
            }
            int allNumbers = showHeadNumbers(headNode);
            if (index > allNumbers || index < 0) {
                return null;
            }
            HeroNode tmp = headNode;
            for (int i = 0; i <=allNumbers - index; i++) {
                tmp=tmp.next;
            }
            return tmp;            }}

三.反转链表

    1.用来存倒序的新链表           2.保存指针位置,也是取出的哪一个节点                   3.保存取出的那一串链表,以便 指针后移

    注意链表是一串      tmp.next = newHeroNode.next;  newHeroNode.next =tmp;          将一个节点拆开到新的链表

    public HeroNode getReverseHeroNode(HeroNode headNode) {

            HeroNode newHeroNode = new HeroNode(0, "", "");  //用来存倒序的新链表
            HeroNode tmp = headNode.next;      //  保存指针位置,也是取出的哪一个节点
            HeroNode removedTmp;           //保存取出的那一串链表
            while (tmp!=null){

                removedTmp=tmp.next;    //先将后面的保存起来
               tmp.next = newHeroNode.next;   //把取出的节点的下一位指向  新链表的下一位
               newHeroNode.next =tmp;         ////把新链表的下一位  指向取出的节点
               tmp=removedTmp;

            }
            headNode.next=newHeroNode.next;
            return headNode;            }

四.倒序打印链表(利用栈)

    * 在不改变链表结构下,将链表倒序打印  循环链表放入栈,利用栈先进先出原理打印
    public void showReverseHeroNode(HeroNode heroNode) {
        if (heroNode.next == null) {
            System.out.println("链表为空!");
            return;
        }
        Stack<HeroNode> stackheroNode = new Stack<HeroNode>();
        HeroNode cur = heroNode.next;
        while (cur != null) {
            stackheroNode.push(cur);
            cur = cur.next;
        }
        while (stackheroNode.size() > 0) {
            System.out.println(stackheroNode.pop());            }}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章