链表环和反转

作者: 崔鹏宇 | 来源:发表于2019-07-26 23:09 被阅读2次

Github

public class 链表环和反转 {
    public static int count;

    public static void main(String[] args) {
        Node node1 = new Node(1);
        Node node2 = new Node(2);
        Node node3 = new Node(3);
        Node node4 = new Node(4);
        Node node5 = new Node(5);
        Node node6 = new Node(6);
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
//        node6.next = node4;
//        System.out.println("链表是否有环" + isCore(node1));
//        System.out.println("链表环的长度" + count);
//        printLastNode(node1);
//        printLastNodeStack(node1);
    }

    public static class Node {
        int data;
        Node next;

        Node(int data) {
            this.data = data;
        }
    }

    /**
     * 判断链表是否有环 和环长
     *
     * @param head
     * @return
     */
    public static boolean isCore(Node head) {
        Node p1 = head;
        Node p2 = head;
        while (p2 != null && p2.next != null) {
            p1 = p1.next;
            p2 = p2.next.next;
            count++;
            //如果相等证明有环
            if (p1 == p2) {
                return true;
            }
        }
        return false;
    }


    /**
     * 递归反转链表
     *
     * @param node
     */
    public static void printLastNode(Node node) {
        if (node != null) {
            printLastNode(node.next);
            System.out.println("node = [" + node.data + "]");
        }
    }

    /**
     * 栈入出反转链表
     *
     * @param node
     */
    public static void printLastNodeStack(Node node) {
        //创建栈
        Stack<Node> stack = new Stack<>();
        //循环不为空入栈并取下一个节点继续
        while (node != null) {
            stack.push(node);
            node = node.next;
        }
        //出栈
        while (!stack.isEmpty()) {
            System.out.println("node = [" + stack.pop().data + "]");
        }
    }
}

相关文章

  • 链表环和反转

    Github

  • 链表算法

    定位链表中间节点 链表反转 链表是否有环, 返回的是环的位置,0代表没有环

  • 单链表的就地逆置--java实现(含头节点和不包含头节点)

    前沿:链表是面试中经常问道的知识点,比如链表反转,就地反转,判断单链表是否相交,判断链表是否有环等都是常问的问题....

  • 1.数据结构-链表问题

    链表相关问题 删除节点 链表去重 有环链表 反转链表 链表排序 链表相交 其他问题 面试题 02.03. 删除中间...

  • 链表相关算法 - go语言实现

    链表结构 反转链表 (移除节点)删除链表中等于给定值 val 的所有节点 合并两个有序链表 链表成环检测 删除链表...

  • 链表

    单向链表 链表反转 判断是否有环,找链表的中间节点 快慢指针 找环的入口(求两个链表的交点可以转化成这个问题) p...

  • 数据结构-链表

    相关掌握点 单向链表 双向链表 反转单向链表 判断链表是否含有环 链表构建 链表是一种线性结构,是通过指针引用节点...

  • 数据结构学习

    无环单链表的反转 http://blog.csdn.net/feliciafay/article/details/...

  • 排序算法、链表是否有环、反转、删除结点

    折半查找 冒泡排序 选择排序 插入排序 判断一个链表是否有环 链表反转 链表删除结点方法: 只给定单链表中某个结点...

  • Algorithm小白入门 -- 单链表

    单链表递归反转链表k个一组反转链表回文链表 1. 递归反转链表 单链表节点的结构如下: 1.1 递归反转整个单链表...

网友评论

    本文标题:链表环和反转

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