用递归实现的得到某个位置的节点

来源:5-7 更多和链表相关的问题

有一种力量从不曾消逝

2018-05-14

用递归实现的得到某个位置的节点

public static ListNode get(ListNode head,int index){
   if(index == 0){
       return head;
   }
   return get(head, --index).next;
}


// 在某位置添加一个节点,调用上面的get递归方法

public static ListNode add(ListNode head,int index,int val){
   ListNode prev = get(head,index);
   ListNode node = new ListNode(val);
   node.next = prev.next;
   prev.next = node;
   return head;
}


老师,您看这样写可以吗?

写回答

1回答

liuyubobobo

2018-05-14

get方法是可以的。这样写也是可以的:)

public static ListNode get(ListNode head,int index){
   if(index == 0)
       return head;
  
   return get(head.next, index-1);
}


对于add方法:


一方面,在index处添加一个新的元素,通常是指在添加操作以后,新的元素在index的位置。你现在的写法是添加在了index+1的位置(因为index位置的节点是prev)。这样做的结果是,使用你写的add函数,永远不能在一个空链表上添加进第一个元素:)


另一方面,如果你要写add的递归算法的话,严格来说,这个add算法不是递归算法。因为add没有自己调用add。抵用另外一个递归函数get不能让add称为是递归函数:)


再试试看?在完成以后,完全可以自己写测试用例,测试自己的程序结果。可以使用已有的,正确的非递归方式书写的链表运行同样的测试用例,来比较验证自己的递归链表是否正确:)


加油!

1
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程