《剑指offer》笔记-第三章(4)

xiaoxiao2021-02-28  103

面试题24:翻转链表

         定义一个函数,输入一个链表的头节点,翻转该链表并输出翻转后的头节点。

        Struct ListNode{intm_nKey; ListNode* m_pNext;}

测试用例:

       功能测试:输入的链表含多个节点/一个节点;

       特殊输入:链表是null;

分析:

       1.    需要3个指针,当前节点pNode、下一个节点pNext、上一个节点pPrev;

       2.    翻转后的头指针要指向翻转前的尾节点;翻转后的尾节点的要指向null;

面试题25:合并两个排序的链表

       输入两个递增排序的链表,合并这两个链表并使新链表的节点仍按是递增排序的。

测试用例:

      功能测试:输入两个链表中有多个节点/只有一个节点;节点值互不相等/存在相等;

      特殊输入:两个链表中一个头节点为null;两个链表头节点都为null;;

分析:

      1.    两个链表有一个为空,则返回两一个另一个链表头节点;都为空返回null;

      2.    比较两个链表的头节点,较小的作为新链的头节点,新链头节点的下一个节点是 去掉所选节点后 的两个链的头节点;

      3.    可用递归实现;

面试题26:树的子结构

      输入两棵二叉树A和B,判断B是不是A的子树。

      Struct BinaryTreeNode{doublem_dbValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}

测试用例:

       功能测试:B是/不是A的子树;B的节点右分叉(不是完全二叉树);只有左子节点/右子节点;

      特殊输入:树A和B都是null;树A和B有一个是null;

分析:

      1.    判断两个小数是否相等,不能用“==”,计算机表示小数都有误差,只能判断两个小数的差绝对值是否小于一个很小的数(如0.000001);

      2.    每次使用指针时,问自己这个指针是否可能是null,是的话该如何处理;

3.5 总结

      规范性:书写清晰、布局合理、命名合理

      完整性:基本功能、边界条件、错误处理

      鲁棒性:采取防御性变成;在函数入口判断输入的有效性,处理无效的输入;

转载请注明原文地址: https://www.6miu.com/read-43434.html

最新回复(0)