剑指offer
Sunny君
这个作者很懒,什么都没留下…
展开
-
链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6。这个链表倒数第3个结点是值为4的结点分析:如果链表有n个结点,倒数第k个结点,就是第n-k+1个结点。最直接的办法就是直接遍历链表,第一次统计出链表中结点的个数n,第二次找到链表的第n-k+1个结点,便是倒数第k结点。这样的解法需要遍历链表两次。遍历链表一次的解法:原创 2018-01-05 10:13:13 · 103 阅读 · 0 评论 -
反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。分析:使用三个指针,一个指向当前遍历的结点,一个指向前一个结点,一个指向后一个结点。从头结点开始遍历,指向前一个结点的指针初始化为空,首先初始化这三个指针。pNode=pListHead,pPrev=NULL,pNext=pNode->m_pNext。反转链表,pNode->Next=pPrev。向后移动链表,p原创 2018-01-05 11:38:06 · 148 阅读 · 0 评论 -
合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使得新链表中的结点仍然按照递增排序的分析:假设链表1:1->3->5->7链表2:2->4->6->8合并之后的链表应该是1->2->3->4->5->6->7->8我们首先比较链表1和链表2的头结点的值的大小,值小的结点1作为新链表的头结点,此时链表1:3->5->7,链表2:2->4->6->8。再比较此时两个链表的头结点,值小的结点2原创 2018-01-05 15:11:25 · 112 阅读 · 0 评论 -
树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。分析:要查找数A中是否存在数B结构一样的二叉树,分为两步,第一步是在数A中查找和B的根结点的值一样的结点R,第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构。测试用例:功能测试(树A和树B都是普通的二叉树,树B是或者不是树A的子结构)特殊输入测试(两棵二叉树中的一个或者两个根结点为NULL指针、二叉树的所有结点都没有原创 2018-01-05 15:52:51 · 109 阅读 · 0 评论 -
二叉树的镜像
题目:完成一个函数,输入一个二叉树,该函数输出它的镜像分析:交换根结点的左右子树,交换10的左右子树,交换6的左右子树。测试用例:功能测试(普通的二叉树,二叉树的所有结点都没有左子树或者右子树,只有一个结点的二叉树)特殊输入测试(二叉树的根结点为NULL指针)代码如下:struct BinaryTreeNode{ int m_nValue; BinaryTre原创 2018-01-05 16:27:43 · 132 阅读 · 0 评论