一.题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 二.思路 注:链表1和链表2是两个递增排序的链表,合并这两个链表得到升序链表为链表3. 首先分析合并两个链表的过程.我们的分析从合并两个链表的头结点开始.链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点.如下图所示. 链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点是合并后链表的头结点. 在剩余的结点中,链表2的头结点的值小于链表1的头结点的值,因…
剑指Offer - 九度1519 - 合并两个排序的链表2013-11-30 22:04 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数.下面一行包括n个数t(1<…
  题目描述:   输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.   解题思路:   首先需要判断几个特殊情况,即判断输入的两个指针是否为空.如果第一个链表为空,则直接返回第二个链表:如果第二个链表为空,则直接返回第一个链表.如果两个链表都是空链表,合并的结果是得到一个空链表.   两个链表都是排序好的,我们只需要从头遍历链表,判断当前指针,哪个链表中的值小,即赋给合并链表指针,剩余的结点仍然是排序的,所以合并的步骤和之前是一样的,所以这是典型的递…
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val <= p2.val,则p3把p1指向的结点加入h3,p1后移动.反之,对p2进行对应操作. 代码:(未验证正确性,提交时显示超时,所以不知道功能是否实现,还是仅仅时间复杂度高?) public ListNode Merge(ListNode list1,ListNode list2) { if(lis…
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 重点抓住这两个链表都是单挑递增的,因此我们只需要不断地比较他们的头结点就行,明显这是个重复的过程. 可以用递归做,也可以不用递归做,不用递归做只需要用两个指针来一直指向两个链表的“头”结点就行了 代码 /* function ListNode(x){ this.val = x; this.next = null; }*/ function Merge(pHead1, pHead2)…
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的.例如,输入图中的链表1和链表2,则合并之后的升序链表如链表3所示.链表节点定义如下:  思路分析 非递归,设置一个头结点,比较两个链表中的值,通过头结点将其串联起来,最后返回的是头结点的next 递归方法. 测试用例 功能测试:输入的两个链表有多个节点;节点的值互不相同或者存 在值相等的多个节点 特殊输入测试:两个链表的一个或者两个头节点为nullptr 指…
题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1 分析:在队列的尾部插入元素很简单,直接用栈的push就可以实现,但是在头部删除一个元素就不简单了,虽然大家可能都会想到在JS中可以直接调用shift方法,但是题目要求我们用两个栈,便是让我们手写一下shift.我们分别用instack和outstack来保存入队元素和出队元素,删除头部元素的时候,把入栈元素全部push进…
剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1:直官思路:直接顺序扫描,O(n) class Solution { public: int GetNumberOfK(vector<int> data ,int k) { ; ;i<data.size();i++) { if(data[i]==k) count++; } return co…
// 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的.例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 // 表3所示. #include <iostream> #include "List.h" ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if (pHead1 == nullptr)//鲁棒一:若为空节点直接返回另…
本题来自<剑指offer> 合并两个排序的链表 题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: A:采用递归的方式(C++ Code) 在各链不为空的情况下,比较各头结点的大小,将其作为头结点,之后递归调用. B:采用循环的方式(Python Code) 需要考虑较为多的因素,代码的鲁棒性是否为空或者只有一个节点. C++ Code:(递归) /* struct ListNode { int val; struct ListNode…