gpt4 book ai didi

java - 在链表末尾插入节点

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:03 26 4
gpt4 key购买 nike

对于这类问题,有一个简单的迭代解决方案。

Node Insert(Node head,int data) {
Node newNode = new Node();
newNode.data = data;
if (head == null) {
return newNode;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
return head;
}

它工作得很好。但我想学习递归并以这种视角看待事物。因此我想出了下面的解决方案,它看起来很优雅,但我不得不承认这只是直觉并且给定的代码有效。我想开发一个处理递归的心智模型,或者至少以某种方式来验证我的代码是否可以正常工作。如何从理论上验证以下解决方案是否有效。

递归版本

Node Insert(Node head,int data) {
// Base case.
if (head == null) {
Node newNode = new Node();
newNode.data = data;
return newNode;
}
// Smaller problem instance.
head.next = Insert(head.next, data);
return head;
}

最佳答案

递归解决方案通常必须遵守以下规则:

  1. 它必须区分一般 情况和基本 情况。然后,它必须包含某种类型的代码 fork (通常是一个 if)到两个代码块:基本 block 和通用 block 。
  2. 基础 block 必须立即返回响应(非递归)。
  3. 通用 block 必须(递归地)重新调用相同的函数,但不是使用相同的参数值(这将产生无限递归),而是使用前进到基础的值案例。

当然,这是一个简单的递归模型,在实践中可能会更复杂(不止一个基本情况,两个函数之间的递归等)。

如果我们根据这些规则从理论上分析您的提案,我们可以看到它符合所有这些规则。

关于java - 在链表末尾插入节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32625964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com