扭转链表的问题

时间:2015-06-08 23:14:28

标签: java algorithm linked-list nodes

我正在尝试了解链接列表,这对我来说没有什么挑战性。我试图用递归方法反转链接列表。这是我的代码:

cs.ClntSock.BeginSend(cs.BByteBuffer, 0, cs.BByteBuffer.Length, SocketFlags.None,new AsyncCallback(SendCallback), cs);

我遇到的问题是反向方法。当方法结束时,它只返回值为“First”的最后一个节点。通过整个递归,remainingNode只保存并从基本情况中重新调整值,这让我感到困惑。我除了它进一步通过节点。执行该方法后,newList只保存一个节点,下一个节点为null,该节点现在是头。我假设它将使用序列First - >来反转链表。第二 - >第三 - >第四。我做错了什么?

1 个答案:

答案 0 :(得分:1)

实际上,一切都在这里工作。您唯一的问题是主要方法 :您没有得到方法的结果。

newList.reverseTest(newList.head);

您需要使用结果实际设置新头:

newList.head = newList.reverseTest(newList.head);

如果您已将方法声明为静态,那么这将更容易看到:

newList.head = ListNode.reverseTest(newList.head);

作为奖励,这里是一个完全递归的等价物:

public static Node reverse(Node head) {
    if (head == null || head.next == null) {
        return head;
    }

    Node newHead = reverse(head.next);

    // head.next points to the new tail, we push the former head at the end
    head.next.next = head;
    // now head has become the new tail, we cut the end of the list
    head.next = null;

    return newHead;
}