用递归实现的得到某个位置的节点
来源: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称为是递归函数:)
再试试看?在完成以后,完全可以自己写测试用例,测试自己的程序结果。可以使用已有的,正确的非递归方式书写的链表运行同样的测试用例,来比较验证自己的递归链表是否正确:)
加油!
10
相似问题