自学内容网 自学内容网

链表的返回中点问题

public class test9 {
    // 定义一个内部类Node,表示链表的节点
    public static class Node{
        public int value; // 节点的值
        public Node next; // 指向下一个节点的引用

        // 构造函数,用于创建一个新的节点并初始化其值
        public Node(int v){
            value = v;
        }
    }

    // 奇数长度返回中点,偶数长度返回上中点
    public static Node midOrUpMidNode(Node head){
        if(head == null || head.next ==null || head.next.next ==null){
            return head; // 如果链表为空或只有一个或两个节点,直接返回头节点
        }
        Node slow = head.next; // 慢指针从第二个节点开始
        Node fast = head.next.next; // 快指针从第三个节点开始
        while(fast.next != null && fast.next.next != null){
            slow = slow.next; // 慢指针每次移动一步
            fast = fast.next.next; // 快指针每次移动两步
        }
        return slow; // 当快指针到达链表末尾时,慢指针所在位置即为中点或上中点
    }

    // 奇数长度返回中点,偶数长度返回下中点
    public static Node midOrDownMidNode(Node head){
        if(head == null || head.next ==null ){
            return head; // 如果链表为空或只有一个节点,直接返回头节点
        }
        Node slow = head.next; // 慢指针从第二个节点开始
        Node fast = head.next; // 快指针从第二个节点开始
        while(fast.next != null && fast.next.next != null){
            slow = slow.next; // 慢指针每次移动一步
            fast = fast.next.next; // 快指针每次移动两步
        }
        return slow;
 // 当快指针到达链表末尾时,慢指针所在位置即为中点或下中点
    }

    // 奇数长度返回中点前一个,偶数长度返回上中点前一个
    public static Node midOrUpMidPreNode(Node head){
        if(head == null || head.next ==null || head.next.next ==null){
            return null; // 如果链表为空或只有一个或两个节点,没有中点前一个节点,返回null
        }
        Node slow = head; // 慢指针从头节点开始
        Node fast = head.next.next; // 快指针从第三个节点开始
        while(fast.next != null && fast.next.next != null){
            slow  = slow.next; // 慢指针每次移动一步
            fast = fast.next.next; // 快指针每次移动两步
        }
        return slow; 
// 当快指针到达链表末尾时,慢指针所在位置的前一个节点即为中点前一个或上中点前一个
    }

    // 奇数长度返回中点前一个,偶数长度返回下中点前一个
    public static Node midOrDownMidPreNode(Node head){
        if(head == null || head.next ==null ){
            return null; // 如果链表为空或只有一个节点,没有中点前一个节点,返回null
        }
        if(head.next.next == null){
            return head; // 如果链表只有两个节点,返回头节点作为下中点前一个节点
        }
        Node slow = head; // 慢指针从头节点开始
        Node fast = head.next; // 快指针从第二个节点开始
        while(fast.next != null && fast.next.next != null){
            slow = slow.next; // 慢指针每次移动一步
            fast = fast.next.next; // 快指针每次移动两步
        }
        return slow; 
// 当快指针到达链表末尾时,慢指针所在位置的前一个节点即为中点前一个或下中点前一个
    }
}


原文地址:https://blog.csdn.net/2401_83010439/article/details/140593913

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!