在以下代码中,带有一个串起的链接列表,我创建了2个指针, fast 和 slow 。我将快速的指针移至末端,然后慢速指向中间。然后,我扭转了右半。
public void test(ListNode head) {
ListNode fast = head, slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next; //to the end of the list
slow = slow.next; //to the middle
}
slow = reverse(slow);
fast = head;
while (fast != null) {
System.out.println(fast.val); //fast pointer only goes until the middle of the list
fast=fast.next;
}
return true;
}
public ListNode reverse(ListNode head) {
ListNode prev = null;
while (head != null) {
ListNode next = head.next;
head.next = prev;
prev = head;
head = next;
}
return prev;
}
我不明白的是,一旦我逆转了右半,快速指针只能访问元素,直到linkedlist的中间。
例如,假设LinkedList具有1->2->4->8->5
。反向(慢(后,缓慢的指针指向5->8->4
,这很好。但是,现在快速指针指向1->2->4
,我不明白为什么。为什么它无法访问8
和5
?反向方法对快速指针有什么作用?
您的最终链接列表是1->2->4<-8<-5
和4->(null)
。您应该在某个地方设置下一个将解决问题的2->5
的下一个。