看到一道面试题:
typedef struct node
{
int value;
struct node* next;
struct node* prev;
} S_LIST_NODE;
//实现有序双向链表的插入和删除
int insert1(S_LIST_NODE* _list, int value);
int delete1(S_LIST_NODE* _list, int value);
删除我就不写了,正好回顾一下lambda的递归写法,如有不妥请评论直接指出。谢谢。
废话不多时上代码:
//有序双向链表
int insert1(S_LIST_NODE * _list, int value)
{
node *temp = _list;
function<void(node*)> lb = [&](node *_left)
{
if (_left==nullptr)
{
S_LIST_NODE *right = new S_LIST_NODE();
right->value = value;
right->prev = temp;
right->next = nullptr;
temp->next = right;
return;
}
if (_left->value < value)
{
temp = _left;
lb(_left->next);
}
else
{
S_LIST_NODE *left = new S_LIST_NODE();
left->value = value;
left->prev = temp;
left->next = _left;
temp->next = left;
_left->prev = left;
}
};
lb(temp->next);
return 1;
}
调用方式:
S_LIST_NODE * temp = new S_LIST_NODE();
insert1(temp, 1);
insert1(temp, 2);
insert1(temp, 16);
insert1(temp, 3);
insert1(temp, 6);
insert1(temp, 10);
递归lambda就需要使用是std::function保存lambda了。其他的没有什么特别之处,好久没写递归,还是思考了一晚上写出来的。有时间复习一下双递归的OJ赛题吧~~。