剑指offer
weiaiyisheng_ljj
这个作者很懒,什么都没留下…
展开
-
合并两个有序链表,合并之后依旧有序
解法一 使用递归 struct list_node { int data; list_node* next; list_node(int data) :data(data) , next(NULL) {} }; // 1 递归法 list_node* R_mergc(list_node* l1, list_node* l2) { if (l1 == NULL原创 2018-01-15 16:31:07 · 348 阅读 · 0 评论 -
【剑指offer】实现 1+2+3+...+n,要求不能使用乘除法,循环,条件判断,选择相关的关键字
这个题因为涉及到判断n 是否 大于0,但是题目中说明不能使用条件判断,所以可以使用 && ,因为它有短路条件 //实现 1+2+3+...+n,要求不能使用乘除法,循环,条件判断,选择相关的关键字 size_t Sum(size_t n) { size_t ret = n; bool Bool = (n > 0) && (ret = Sum(n - 1) + ret); return re原创 2018-01-15 17:32:00 · 335 阅读 · 0 评论 -
逆置/反转单链表,要求只能遍历一遍链表
第一种方法,非递归 list_node* reverse(list_node* list) { assert(list); if (NULL == list->next) { return list; } list_node* new_head = NULL; //用作返回值的头结点 list_node* cur = list; //当前结点 list_node* ne原创 2018-01-16 17:53:47 · 1168 阅读 · 0 评论 -
查找单链表的倒数第K个节点,要求只能遍历一遍链表
算法思想:使用快慢指针 const list_node* Find_K( list_node*& list, int K) { list_node* fast_p = list; list_node* slow_p = list; for (int i = 0; i < K; i++) { fast_p = fast_p->next; } while (fast_p !原创 2018-01-16 18:14:22 · 260 阅读 · 0 评论