【问题标题】:Reversing Order of Linked List data type in f#在 f# 中反转链表数据类型的顺序
【发布时间】:2020-03-20 03:31:23
【问题描述】:

我必须颠倒使用以下数据类型的链表的顺序:

type IntList =
  | Nil
  | Cons of int * IntList 

我尝试过使用单独的“追加”方法,但我想知道一种使用单个函数的方法

let rec append num lst =
  match lst with
  | Nil -> Con (num,Nil)
  | Cons (hd,tl) -> L (hd ,append num tl)

let rec reverse lst = 
  match lst with 
  | Nil -> Nil
  | Cons (hd,tl) -> append hd (reverse tl)

【问题讨论】:

  • 我忘了说我不能使用任何 List 函数

标签: f#


【解决方案1】:

您可以在一个函数中使用累加器变量。当您递归到列表的末尾时,您什么都不做,但保留一个变量,当您从递归返回到列表的开头时,该变量将存储结果。

当您到达列表的末尾时,您只需返回最初是一个空列表的 acuumulator,然后将所有元素添加到其中,同时返回。

由于您将累加器作为递归函数参数,因此最好将其包装在一个除了提供累加器初始值之外什么都不做的函数中。

type IntList =
  | Nil
  | Cons of int * IntList 


let reverse lst = 
  let rec reverseHelper lst acc =
      match lst with 
      | Nil -> acc
      | Cons (hd,tl) -> reverseHelper tl (Cons (hd, acc))
  reverseHelper lst Nil

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2019-02-12
    • 2013-06-15
    • 2020-01-13
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多