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; // 当快指针到达链表末尾时,慢指针所在位置的前一个节点即为中点前一个或下中点前一个 } }
链表的返回中点问题
最新推荐文章于 2024-09-01 15:30:33 发布