方法一:
我们可以计算链表节点的数量,然后遍历链表找到前半部分的尾节点。
方法二:
我们也可以使用快慢指针在一次遍历中找到:慢指针一次走一步,快指针一次走两步,快慢指针同时出发。当快指针移动到链表的末尾时,慢指针恰好到链表的中间。通过慢指针将链表分为两部分。
慢指针:前半部分的末尾,以慢指针为界将链表分成前后两部分
快指针:后半部分的开始
若链表有奇数个节点,则中间的节点应该看作是前半部分。
private ListNode endOfFirstHalf(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while (fast.next != null && fast.next.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
标签:slow,ListNode,fast,next,链表,获取,方法,指针
From: https://blog.csdn.net/m0_74051652/article/details/141194982