带有Java学生链表的递归

时间:2018-02-19 02:20:44

标签: java recursion linked-list

请在这里温柔地对待我...我正在学习并可以使用一些帮助。我试图围绕下面的链表方法。我以为我理解递归是如何工作的,但我在这里遗漏了一些东西。有人可以帮我理解逻辑,以及这个方法的完整调用堆栈吗?我无法弄清楚这些物品是如何加起来的...我担心这里需要一定程度的细节。我在别处寻求帮助,但其他例子似乎没有帮助。

/**
* Compute the sum of all the integers in a linked list of integers. 
* @param head a pointer to the first node in the linked list
*/
  public static int addItemsInList( IntNode head ) { 
    if ( head == null ) {
        // Base case: The list is empty, so the sum is zero. 
      return 0;
    } else {
          // Recursive case: The list is non-empty. Find the sum of
          // the tail list, and add that to the item in the head node.
          // (Note that this case could be written simply as
          //return head.item + addItemsInList( head.next );)
      int listsum = head.item;
      int tailsum = addItemsInList( head.next ); 
      listsum = listsum + tailsum;
      return listsum;
   }
}

1 个答案:

答案 0 :(得分:0)

阅读评论。评论代码比引入2个临时变量更容易理解。要得到的是,跟随头部的List的其余部分本身就是一个List,而这个List是head.next。

/**
* Compute the sum of all the integers in a linked list of integers. 
* @param head a pointer to the first node in the linked list
*/
  public static int addItemsInList( IntNode head ) { 
    if ( head == null ) {
        // Base case: The list is empty, so the sum is zero. 
      return 0;
    } else {
        // Recursive case: The list is non-empty. Find the sum of
        // the tail list, and add that to the item in the head node.
      return head.item + addItemsInList (head.next);)
   }
}

可以看到4个Int的列表:

List (8, List(7, List (3, List (2, List ()))))

最后一个元素是空列表,返回0.

所以你有head.item 8,并添加addItemsInList(7 ...)。 在那里你添加7并从2 ...添加3 ....

最后,空列表返回0,2 + 0 = 2,返回上一个调用,增加3 + 2并返回5,其中7等待返回12,最后8添加12并返回20