相关疑难解决方法(0)

以递归方式反转Java中的链表

我一直在为一个类的Java项目工作.它是链表的实现(此处称为AddressList包含调用的简单节点ListNode).问题在于,所有事情都必须通过递归算法来完成.我能做的一切都很好,没有一种方法:public AddressList reverse()

ListNode:

public class ListNode{
  public String data;
  public ListNode next;
}
Run Code Online (Sandbox Code Playgroud)

现在我的reverse函数只调用一个辅助函数,该函数接受一个允许递归的参数.

public AddressList reverse(){
  return new AddressList(this.reverse(this.head));
}
Run Code Online (Sandbox Code Playgroud)

我的助手功能有签名private ListNode reverse(ListNode current).

目前,我使用堆栈迭代地工作,但这不是规范要求的.我在C中找到了一个递归反转的算法,并手工将其转换为Java代码,但是它有效,但我对此并不了解.

编辑:没关系,我在此期间弄清楚了.

private AddressList reverse(ListNode current, AddressList reversedList){
  if(current == null) 
      return reversedList;
  reversedList.addToFront(current.getData());
  return this.reverse(current.getNext(), reversedList);
}
Run Code Online (Sandbox Code Playgroud)

虽然我在这里,有没有人看到这条路线有任何问题?

java recursion linked-list data-structures

97
推荐指数
8
解决办法
18万
查看次数

Python中类型注释的自引用或转发引用

我试图找出类型的自引用如何与python3的类型注释一起工作 - 文档没有指定任何关于此的内容.

举个例子:

from typing import TypeVar, Optional, Generic

T = TypeVar('T')
class Node(Generic[T]):
    left = None
    right = None
    value = None

    def __init__(
        self, value: Optional[T],
        left: Optional[Node[T]]=None,
        right: Optional[Node[T]]=None,
    ) -> None:
        self.value = value
        self.left = left
        self.right = right
Run Code Online (Sandbox Code Playgroud)

此代码生成错误:

Traceback (most recent call last):
  File "node.py", line 4, in <module>
    class Node(Generic[T]):
  File "node.py", line 12, in Node
    right: Optional[Node[T]]=None,
NameError: name 'Node' is not defined
Run Code Online (Sandbox Code Playgroud)

这是使用Python 3.5.1

python typing typechecking python-3.x python-3.5

12
推荐指数
1
解决办法
5151
查看次数

复合赋值给Python类和实例变量

我一直在努力理解Python对类和实例变量的处理.特别是,我发现这个答案很有帮助.基本上它说如果你声明一个类变量,然后你做一个赋值[instance].property,你将完全分配一个不同的变量 - 一个与类变量不同的命名空间.

所以我考虑过 - 如果我希望我的类的每个实例都有一个默认值(比如零)的成员,我应该这样做:

class Foo:
    num = 0
Run Code Online (Sandbox Code Playgroud)

或者像这样?

class Foo:
    def __init__(self):
        self.num = 0
Run Code Online (Sandbox Code Playgroud)

基于我之前读过的内容,我认为第二个例子是初始化'right'变量(实例而不是类变量).但是,我发现第一种方法也非常有效:

class Foo:
    num = 0

bar = Foo()
bar.num += 1 # good, no error here, meaning that bar has an attribute 'num'
bar.num
>>> 1
Foo.num
>>> 0 # yet the class variable is not modified! so what 'num' did I add to just now?
Run Code Online (Sandbox Code Playgroud)

那么..为什么这个有效?我得不到什么?FWIW,我之前对OOP的理解来自C++,因此通过类比(或指向它发生故障)的解释可能是有用的.

python class

5
推荐指数
1
解决办法
5942
查看次数

是否有一种 pythonic 方式来引用我们使用(某些)Python 内置类型声明的当前对象(自引用)?

使用(某些)Python 内置类型,是否可以引用我们声明的对象?通过“(某些)内置类型”,我想到了例如序列类型、映射类型或集合类型,显然不是数字类型。

我的意思是,无需自己创建类并添加此功能(无需创建子类)。

因此,类似于this下面示例中使用的关键字。

例如,对于“dict”Python 内置类型,如下所示:

a_dictionary = {
    "key_1": "value_1",
    "key_2": "value_2",
    "key_3": this["key_1"] + "_" + this["key_2"] # == "value_1_value_2"
}
Run Code Online (Sandbox Code Playgroud)

甚至:

a_dictionary = {
    "sub_dict_1": {
        "key_1": "value_1_1",
        "key_2": "value_1_2",
        "key_3": this["key_1"] + "_" + this["key_2"] # == "value_1_1_value_1_2"
    },
    "sub_dict_2": {
        "key_1": "value_2_1",
        "key_2": "value_2_2",
        "key_3": this["key_1"] + "_" + this["key_2"] # == "value_2_1_value_2_2"
    }
}
Run Code Online (Sandbox Code Playgroud)

我读了 :

在python中进行函数链接时,有没有办法引用“当前”对象?

当我需要一本自参考字典时我该怎么办?

参考字典本身

python中的自引用类?

有没有办法在python中引用当前函数?

在 Python 中进行列表/字典理解时是否可以访问当前对象?

和其他一些,但它与我的问题开头描述的要求不符。

非常感谢你的帮助!

python

3
推荐指数
1
解决办法
76
查看次数