1.链表的中间节点
public class MiddleNode876 {
//定义一个单链表
public class ListNode {
int val; //当前节点值
ListNode next; //下一个节点值
//构造方法 初始化当前节点值
ListNode(int x) { val = x; }
}
/**链表的中间节点
*方法1:将链表的非空节点放入到数组中 时间复杂度 O(n)
* @param head 带处理的链表
* @return 中间节点
*/
public ListNode middleNode01(ListNode head) {
ListNode[] A = new ListNode[100];
int t = 0;
while (head != null) {
A[t++] = head;
head = head.next;
}
return A[t / 2];
}
/**链表的中间节点
*方法2:快慢指针 时间复杂度 O(n)
* @param head 带处理的链表
* @return 中间节点
*/
public ListNode middleNode02(ListNode head) {
ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {
//快指针是慢指针速度的2倍
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
}
2. LeetCode代码测试