面试题:合并两个排序的链表题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然
面试题:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图3.7中的链表1和链表2,则合并之后的升序链表3所示。链表结点定义如下:
struct list Node
{
int m _n Value;
listNode* m_pNext;
};
面试题:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图3.7中的链表1和链表2,则合并之后的升序链表3所示。链表结点定义如下:
struct list Node
{
int m _n Value;
listNode* m_pNext;
};
面试题:两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
面试题:和为s的两个数字VS和为s的连续正数序列
题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。
题目二:输入一下正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。
面试题:反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:
struct List Node
{
int m_n Key;
ListNode+ m_p Next;
};
面试题:数组中的逆序对
题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
面试题:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是刚返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
面试题:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
链表结点定义如下:
struct List Node
{
int m_n Key;
ListNode* m_pNext;
};
面试题:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列的弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。
面试题:链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
链表结点定义如下:
struct List Node
{
int m n Value;
ListNode* m_p Next;
};
面试题:数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。
面试题:字符串的排列
题目:输入一个字串符串,打印出该字符串中字符的所有排序。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、bac、bca、cab和cba。