逆转链接列表后,对指针的效果



在以下代码中,带有一个串起的链接列表,我创建了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,我不明白为什么。为什么它无法访问85?反向方法对快速指针有什么作用?

您的最终链接列表是1->2->4<-8<-54->(null)。您应该在某个地方设置下一个将解决问题的2->5的下一个。

相关内容

  • 没有找到相关文章

最新更新