由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - career cup上面一题递归求解
相关主题
(求推荐)recursion以及把recursion转变为iteration的资料如何 reversely print一个single linked-list中各个node里的数据?
问个白痴问题,DP到底算不算递归?ms面试题目
"简单的"linklist的问题问了一个链表,1->2->3->4->5, 每两个交换,2->1->4->3->5
有人同看Populating Next Right Pointers in Each Node II的recursive写法么?Yahoo 面经
问一道二叉树遍历的问题? 谢谢!一道链表题及其变种
面试官非常反感recursion吗?A家面经 (转载)
递归多少层会stackoverflow?How can one determine whether a singly linked list has a cycle?
面试时 迭代还是递归两种DP
相关话题的讨论汇总
话题: node话题: head话题: next话题: 递归话题: recursion
进入JobHunting版参与讨论
1 (共1页)
z**********8
发帖数: 229
1
2.2 Implement an algorithm to find the nth to last element of a singly
linked list.
这题我的直觉就是两个指针然后保证两者的距离为n,跟它给出的标准解法一样。但是
他有这么一段话:
“Note: This problem screams recursion, but we’ll do it a different way
because it’s trickier. In a question like this, expect follow up questions
about the advantages of recursion vs iteration.”
实在想不出recursion的解法,可以求达人解释一下么?(如果用两个指针的话应该空
间复杂度是O(1)时间是O(n),n是链表长度。用递归可以做的更好么?advantage在
哪里呢?)
p*****2
发帖数: 21240
2
递归的话可以返回next的位置。
最后一个元素返回1,你知道你next的位置,就知道自己的位置了。
z****h
发帖数: 164
3
函数调用的堆栈会保存前面的节点。
p*****2
发帖数: 21240
4
比如 int check(Node* node,k)
{
if(node==null)
return 0;

int c=1+check(node.next);
if(c==k)
print()
}
p*****o
发帖数: 1285
5
Node* get_back(Node *head, int n){
static int ct;
if (head->next == NULL) {
ct = 0;
return head;
}
Node* res = get_back(head->next, n);
++ct;
if (ct >= n) return res;
else return head;
}
没有检查n是否超过链表尺寸。似乎也是空间O(1),时间O(n)。

questions

【在 z**********8 的大作中提到】
: 2.2 Implement an algorithm to find the nth to last element of a singly
: linked list.
: 这题我的直觉就是两个指针然后保证两者的距离为n,跟它给出的标准解法一样。但是
: 他有这么一段话:
: “Note: This problem screams recursion, but we’ll do it a different way
: because it’s trickier. In a question like this, expect follow up questions
: about the advantages of recursion vs iteration.”
: 实在想不出recursion的解法,可以求达人解释一下么?(如果用两个指针的话应该空
: 间复杂度是O(1)时间是O(n),n是链表长度。用递归可以做的更好么?advantage在
: 哪里呢?)

z**********8
发帖数: 229
6
谢谢,总觉得用递归不是很straightforward。。。还不如用两个指针。。

【在 p*****2 的大作中提到】
: 比如 int check(Node* node,k)
: {
: if(node==null)
: return 0;
:
: int c=1+check(node.next);
: if(c==k)
: print()
: }

z**********8
发帖数: 229
7
谢谢,总觉得用递归不是很straightforward。。。还不如用两个指针。。

【在 p*****o 的大作中提到】
: Node* get_back(Node *head, int n){
: static int ct;
: if (head->next == NULL) {
: ct = 0;
: return head;
: }
: Node* res = get_back(head->next, n);
: ++ct;
: if (ct >= n) return res;
: else return head;

z**********8
发帖数: 229
8
问下:
Node* res = get_back(head->next, n);应该写成:
Node* res = get_back(&((*head)->next), n);吧?

【在 p*****o 的大作中提到】
: Node* get_back(Node *head, int n){
: static int ct;
: if (head->next == NULL) {
: ct = 0;
: return head;
: }
: Node* res = get_back(head->next, n);
: ++ct;
: if (ct >= n) return res;
: else return head;

p*****2
发帖数: 21240
9

递归写起来容易。

【在 z**********8 的大作中提到】
: 谢谢,总觉得用递归不是很straightforward。。。还不如用两个指针。。
l*****y
发帖数: 90
10
The recursive method could be very similar to the iterative approach:
node* findNtolast(node* head, int n){
for (node*tmp = head, int i=0; inext; tmp=tmp->next){}
recurs(head, tmp);
}
node* recurs(node* head, node* cur){
if (!cur->next)
return head;
else
return rev(head->next, cur->next);
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
两种DP问一道二叉树遍历的问题? 谢谢!
我发现我竟然学会了12种tree traversal的办法面试官非常反感recursion吗?
求推荐学习recursive 算法的资料递归多少层会stackoverflow?
Amazon 打印给定node距离最近的K个nodes面试时 迭代还是递归
(求推荐)recursion以及把recursion转变为iteration的资料如何 reversely print一个single linked-list中各个node里的数据?
问个白痴问题,DP到底算不算递归?ms面试题目
"简单的"linklist的问题问了一个链表,1->2->3->4->5, 每两个交换,2->1->4->3->5
有人同看Populating Next Right Pointers in Each Node II的recursive写法么?Yahoo 面经
相关话题的讨论汇总
话题: node话题: head话题: next话题: 递归话题: recursion