剑指offer面试题17
2014-05-31 10:18
232 查看
面试题17:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如下图所示的链表1和链表2,则合并之后的升序链表如链表3所示。链表的定义如下:
思路:通过对题目进行分析,可以通过循环(迭代)和递归两种方式实现。下面是递归实现的一种。关键是要分析题目。同时注意一些特殊的输入,如链表为空或只有一个结点的情况,一定要认真的分析,不要急于写代码。
算法实现:
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如下图所示的链表1和链表2,则合并之后的升序链表如链表3所示。链表的定义如下:
/*******链表结点定义****/ struct ListNode { int m_nValue; ListNode* m_pNext; };
思路:通过对题目进行分析,可以通过循环(迭代)和递归两种方式实现。下面是递归实现的一种。关键是要分析题目。同时注意一些特殊的输入,如链表为空或只有一个结点的情况,一定要认真的分析,不要急于写代码。
算法实现:
// 面试题17.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "..\List.h" //*********方法1************** ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(pHead1 == NULL) return pHead2; else if(pHead2 == NULL) return pHead1; ListNode* pMergedHead = NULL; if(pHead1->m_nValue < pHead2->m_nValue) { pMergedHead = pHead1; pMergedHead->m_pNext = Merge(pHead1->m_pNext, pHead2); } else { pMergedHead = pHead2; pMergedHead->m_pNext = Merge(pHead1, pHead2->m_pNext); } return pMergedHead; } //********测试代码*********** void Test1() { //创建链表结点 ListNode* pNode1_1 = CreateListNode(1); ListNode* pNode1_2 = CreateListNode(3); ListNode* pNode1_3 = CreateListNode(5); ListNode* pNode1_4 = CreateListNode(7); ListNode* pNode2_1 = CreateListNode(2); ListNode* pNode2_2 = CreateListNode(4); ListNode* pNode2_3 = CreateListNode(6); ListNode* pNode2_4 = CreateListNode(8); //链接链表 ConnectListNodes(pNode1_1,pNode1_2); ConnectListNodes(pNode1_2,pNode1_3); ConnectListNodes(pNode1_3,pNode1_4); ConnectListNodes(pNode2_1,pNode2_2); ConnectListNodes(pNode2_2,pNode2_3); ConnectListNodes(pNode2_3,pNode2_4); //打印链表 PrintList(pNode1_1); PrintList(pNode2_1); //合并链表并打印 PrintList(Merge(pNode1_1,pNode2_1)); } void Test2() { //创建链表结点 ListNode* pNode1_1 = CreateListNode(1); ListNode* pNode2_1 = CreateListNode(2); //打印链表 PrintList(pNode1_1); PrintList(pNode2_1); //合并链表并打印 PrintList(Merge(pNode1_1,pNode2_1)); } int _tmain(int argc, _TCHAR* argv[]) { Test1(); Test2(); return 0; }
相关文章推荐
- 剑指offer面试题17 合并两个排序的链表
- 剑指offer--面试题17:合并两个排序的链表
- 剑指Offer:面试题17——合并两个排序的链表
- 剑指offer-面试题17.合并两个排序的链表
- 【剑指Offer】面试题17:合并两个排序的链表
- 剑指offer--面试题17
- 剑指offer之面试题17 :合并两个排序的链表
- 【剑指Offer学习】【面试题17 ::合并两个排序的链表】
- 剑指offer 面试题17—合并两个排序的链表
- 剑指offer-面试题17 合并两个递增链表
- 剑指Offer---面试题17:合并两个有序链表
- 【剑指offer 面试题17】合并两个排序的链表
- 剑指offer之面试题17 :合并两个排序的链表
- 剑指offer--面试题17:打印从1到最大的n位数
- 剑指offer_面试题17_合并两个排序的链表(两种思维)
- 【面试题】剑指Offer-17-合并两个有序的单链表
- 【剑指offer】面试题17:打印从1到最大的n位数
- 【剑指offer】3.4代码的鲁棒性——面试题17:合并两个排序的链表
- 剑指offer面试题[17]-合并两个排序的链表
- 剑指offer代码解析——面试题17合并两个排序的链表