我的Java数据结构学习-4-3---链表 (大厂面试题)

 

 

 

 

//获取到单链表节点的有效个数(带头结点的需要不统计头节点)
    public int getLinkedLength(HeroNode head) {
        if (head.next == null) {//空链表
            return 0;
        }
        int length = 0;
        //定义一个辅助指针,不要统计头节点。
        HeroNode cur = head.next;
        while (cur != null) {
            length++;
            cur = cur.next;//遍历
        }
        return length;
    }

    //查找单链表的倒数第K个节点。
    public HeroNode getLastIndexNode(HeroNode head, int LastIndex) {
        if (head.next == null) {
            return null;//没有找到
        }
//得到链表长度(有效个数)
        int size = getLinkedLength(head);
//倒数转换为顺序数
        if (LastIndex <= 0 || LastIndex > size) {
            return null;//找不到
        }
        HeroNode temp = head.next;
        for (int i = 0; i < size - LastIndex; i++) {
            temp = temp.next;
        }
        return temp;


    }

    //链表节点反转
    public void reverseLinkedList(HeroNode head) {
        //当前链表为空,或者只有一个节点,无需反转
        if (head.next == null || head.next.next == null) {
            return
                    ;
        }
        HeroNode cur = head.next;
        HeroNode nextNode = null;//指向当前节点的下一个节点。
        HeroNode reverseHead = new HeroNode(0, "", "");
        //遍历原来的链表,并取出存放在新的链表里面(reverseHead)
        while (cur != null) {
            nextNode = cur.next;//保存当前节点的下一个节点。
            cur.next = reverseHead.next;//将cur的下一个系欸但指向新的链表的头部。
            reverseHead.next = cur;
            cur = nextNode;
        }
        //将head。next指向reverseNde
        head.next = reverseHead.next;

    }

链表逆序打印:采用栈机制()

//使用栈stack(后进先出),逆序打印
    public void reversePrintf(HeroNode head) {
        if (head.next == null) {
            System.out.println("空链表不能打印");
            return;
        }
        Stack<HeroNode> stack = new Stack<>();
        HeroNode cur = head.next;
        //将链表的所有节点压入栈
        while (cur != null) {
            stack.push(cur);//压入
            cur = cur.next;//指针后移
        }
        //遍历将栈中的节点打印()pop
        while (stack.size() > 0) {
            System.out.println(stack.pop());//出栈打印
        }
    }

 

posted on 2020-08-05 14:26  白嫖老郭  阅读(88)  评论(0编辑  收藏  举报

导航