一直忘记更新了,把剑指offer更新完吧.... 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 题目分析 这道链表的题目不难,意思也很容易清楚,就是删除相邻的重复节点,不过需要注意两点: 1.因为链表是单向的,如果是第一个.第二个节点就重复的话,删除就比较麻烦.因此我们可以额外添加头节点来解决 2.因为重复的节点不一定是重…
题目一:在O(1)时间内删除链表节点. 给定单项链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点. 思路:(1)如果要删除的节点不是链表的尾节点,则将被删除节点的内容复制到该节点,然后删除被复制的节点. (2)如果删除的节点为链表节点的尾节点,则我们需要从头结点开始遍历到尾节点的前驱节点,删除尾节点. (3)如果链表只有一个节点(除了头结点),则按着(2)删除的同时,还需要head->next = NULL: #include<iostream> using names…
  题目描述:   在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5.   解题思路:   关于链表的大多数题目还是比较简单的,本题也并不太难.   删除重复结点,也就是如果当前结点和下一个结点的值相同,那么就是重复的结点,都可以被删除,为了保证删除之后的链表的连通性,在删除之后,要把当前结点前面的结点和下一个没有重复的结点链接起来,为…
方法1:直接求解,但是要注意特殊情况的处理:即当指数为负,且底数为0的情况. #include<iostream> using namespace std; template<typename T> T myPow(T a, int m){ double base = 1; int flag = (m < 0) ? -1 : 1; int n = (m < 0) ? -m : m; while(n > 0){ base = base * a; n --; } if…
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如: 数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为. 解题思路:就是变形的二分查找,但是要考虑特殊情况,例如{1,0,1,1,1},此时只能采取顺序查找. #include<iostream> using namespace std; // int findMinNum1(int tempArray[], int count){…
题目:我们可以使用2✖️1的小矩形横着或者竖着去覆盖更大的矩形.请问用8个2✖️1的小矩形无重叠地覆盖一个2✖️8的大矩形,共有多少种方法? 分析:当放第一块时(假定从左边开始)可以横着放,也可以竖着放,记总的情况为f(8).如果是竖着放,则记下来还有f(7)种放法:若是横着放,则下一块必须横着放,则还有f(6)种放法. 所以可以推导出公式:f(1) = 1 f(2) = 2 f(n)(n为偶数) = f(n-1)+f(n-2); #include<iostream> #include<…
题目1:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个n级台阶共有多少种跳法? 题目2:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶...也可以一次跳n级台阶.求该青蛙跳上一个n级台阶共有多少种跳法? #include<iostream> #include<math.h> using namespace std; // int jumpCase1(int n){ if(n == 1) return 1; if(n == 2) return 2; return…
递归以及非递归实现: #include<iostream> using namespace std; long long fun(long long n){ if(n == 0){ return 0; } if(n ==1){ return 1; } return fun(n-1) + fun(n-2); } long long fun1(long long n){ if(n == 0){ return 0; } if(n ==1){ return 1; } int n1 = 1; int n…
#include<iostream> #include<queue> using namespace std; // 对于出栈解决的思路是:将queue1的元素除了最后一个外全部放到queue2中,然后再pop出queue1的最后一个元素... template<typename T> void popStack(queue<T> &queue1, queue<T> &queue2){ if(queue1.size() == 0)…
#include<iostream> #include<stack> using namespace std; template <typename T> void pushQueue(stack<T> &stack1, T t){ stack1.push(t); } template<typename T> T popQueue(stack<T> &stack1, stack<T> &stack2…