Q:把一个字符串转换为整数。

A1:一个普通但漏洞百出的解法。

  1. int StrToInt(char* str)
  2. {
  3. int number = 0;
  4. while (*str != 0)
  5. {
  6. number = number * 10 + *str - '0';
  7. ++str;
  8. }
  9. return number;
  10. }

漏洞:没有考虑输入的字符串中是否有非数字字符或正负号或空格,并不能转换成整数时该如何错误处理;没有考虑溢出;如果传入是空指针,程序将崩溃,代码不够鲁棒。

A2:初级程序员的解法。

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int StrToInt(const char* str)
  5. {
  6. int symbol = 1;
  7. int number = 0;
  8. //空指针
  9. if (str == nullptr)
  10. {
  11. return 0;
  12. }
  13. //正负号
  14. if (*str == '-')
  15. {
  16. symbol = -1;
  17. ++str;
  18. }
  19. while (*str != 0)
  20. {
  21. if (*str <= '9' && *str >= '0')
  22. {
  23. int temp = number * 10 + *str - '0';
  24. if ((temp - (*str - '0')) / 10 != number)
  25. {
  26. //产生溢出
  27. return 0;
  28. }
  29. number = number * 10 + *str - '0'; //利用位运算效率能高点 number = (number << 1) + (number << 3) + *str & 0xf;
  30. ++str;
  31. //举个例子, 3 * 10 + 5 = 35, 如果(35 - 5) / 10不等于3,那么就产生了溢出
  32. }
  33. else
  34. {
  35. //存在异常字符
  36. return 0;
  37. }
  38. }
  39. return number*symbol;
  40. }
  41.  
  42. int main()
  43. {
  44. const char* str = "-10001252554354534";
  45. cout << StrToInt(str) << endl;
  46. return 0;
  47. }

Q:求链表中的倒数第k个节点。

A:注意要考虑空指针,节点个数小于k,k=0等情况

  1. struct ListNode
  2. {
  3. int val;
  4. ListNode* next;
  5. ListNode(int x) :val(x), next(nullptr) {}
  6. };
  7.  
  8. ListNode* FindKthToTail(ListNode* head, unsigned int k)
  9. {
  10. //节点为空,或者k为0
  11. if (head == nullptr || 0 == k)
  12. {
  13. return nullptr;
  14. }
  15. ListNode* pA = head;
  16. ListNode* pB = head;
  17. int nodeCnt = 0;
  18. while (pA->next != nullptr)
  19. {
  20. ++nodeCnt;
  21. pA = pA->next;
  22. }
  23. //k大于节点数量
  24. if (k > nodeCnt)
  25. {
  26. return nullptr;
  27. }
  28. pA = head;
  29. for (unsigned int i = 0; i < k - 1; ++i)
  30. {
  31. pA = pA->next;
  32. }
  33. while (pA->next != nullptr)
  34. {
  35. pA = pA->next;
  36. pB = pB->next;
  37. }
  38. return pB;
  39. }

剑指offer 面试题0:高质的代码:即考虑边界条件、特殊输入和错误处理的更多相关文章

  1. 剑指offer 面试题0:扎实的基础:即编程语言、数据结构和算法

    编程语言: Q:如果写的函数需要传入一个指针,则是否需要为该指针加上const?把const加在指针不同的位置是否有区别? A:const是用来声明一个常量的,如果不想让一个值改变就应该加上const ...

  2. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  3. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  4. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

  5. 剑指Offer——笔试题+知识点总结

    剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...

  6. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

  7. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  8. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  9. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

随机推荐

  1. SpringBoot 拦截器和自定义注解判断请求是否合法

    应用场景举例: 当不同身份的用户请求一个接口时,用来校验用户某些身份,这样可以对单个字段数据进行精确权限控制,具体看代码注释 自定义注解 /** * 对比请求的用户身份是否符合 * @author l ...

  2. JWT-配置与使用

    1.jwt的安装配置 . 1.1安装JWT pip install djangorestframework-jwt==1.11.0 1.2 settings.py配置jwt载荷中的有效期设置 # jw ...

  3. 恋爱话术库撩妹至尊VIP版

    本软件来自互联网,解锁永久至尊VIP 是一款教你撩妹密语软件.和女生聊天没有话题? 不知道怎么逗乐女生? 女生生气了不会哄? 不知道怎么让女生愿意跟你聊下去? 不知道女生对你有没有意思? 遇到不知道怎 ...

  4. 五、Jmeter的目录结构

    进入安装Jmeter可以看到路径 bin目录 jmeter.bat  windows的启动文件 jmeter.log jmeter运行日志文件 jmeter.sh linux的启动文件 jmeter. ...

  5. 弱肉强食——《哆啦A梦:大雄的新恐龙》观后感

    观看大雄的新恐龙不是在电影院观看的,由于时间的问题无法去电影院观看,是在家通过梦蓝字幕组翻译好的观看的,这个翻译好的视频已经由于版权原因没有发布了. 故事的开始与以往的情节十分相似:大雄因为不想被胖虎 ...

  6. UWP ListView添加不同样式

    先看效果: 使用ListView的ItemTemplateSelector <ListView IsItemClickEnabled="True" ItemContainer ...

  7. Neighbour-Joining (NJ算法)

    clc;clear all;close all; Distance = [0,2,4,6,6,8; 2,0,4,6,6,8; 4,4,0,6,6,8; 6,6,6,0,4,8; 6,6,6,4,0,8 ...

  8. 1.k8s概述、安装、名词解释、资源清单

    一.k8s概述 1.简介 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernete ...

  9. idea修改项目名导致无法找到主类

    描述 本地创建项目copy或者是修改项目名和文件夹名称后 启动springboot项目失败 控制台报错 错误无法找到主类 解决办法 1. 求助互联网得知 需要执行 mvn clean install( ...

  10. intellij idea svn不能更新和提交

    进入设置–version control – subversion如下图,将前边的选项的勾全部去掉,点击ok