面试题17:合并两个排序的链表
2015-05-30 14:44
465 查看
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
非递归:
递归:
非递归:
/*第一种方法:非递归*/ struct ListNode { int value; ListNode * m_pNext; }; ListNode * MergeTwoList(ListNode * pListOneHead, ListNode * pListTwoHead) { //如果第一个链表为空,则第二个链表的头结点是合并后的头结点 if(pListOneHead==NULL) { return pListTwoHead; } //如果第二个链表为空,则第一个链表的头结点是合并后的头结点 if(pListTwoHead==NULL) { return pListOneHead; } //合并后的头结点 ListNode * pMergeHead=NULL; ListNode * nodeOne=pListOneHead; ListNode * nodeTwo=pListTwoHead; ListNode * curLastNode=NULL;//记录当前结点的上一个结点 //如果第一个链表的头结点的值小于第二个链表的,将链表一的头结点设为合并后的头结点 if(nodeOne->value < nodeTwo->value) { pMergeHead=pListOneHead; //记录当前结点 curLastNode=nodeOne; //当前结点指向下一个结点 nodeOne=nodeOne->m_pNext; } else { pMergeHead=pListTwoHead; //记录当前结点 curLastNode=nodeTwo; //当前结点指向下一个结点 nodeTwo=nodeTwo->m_pNext; } while(nodeOne!=NULL&&nodeTwo!=NULL) { //如果第一个链表的结点的值小于第二个链表的 if(nodeOne->value < nodeTwo->value) { //将当前结点接入合并后的链表 curLastNode->m_pNext=nodeOne; //记录当前结点 curLastNode=nodeOne; //当前结点指向下一个结点 nodeOne=nodeOne->m_pNext; } else { //将当前结点接入合并后的链表 curLastNode->m_pNext=nodeTwo; //记录当前结点 curLastNode=nodeTwo; //当前结点指向下一个结点 nodeTwo=nodeTwo->m_pNext; } //如果链表一遍历完毕,将链表二全部接入合并后的链表 if(nodeOne==NULL) { curLastNode->m_pNext=nodeTwo; } if(nodeTwo==NULL) { curLastNode->m_pNext=nodeOne; } } return pMergeHead; }
递归:
struct ListNode { int m_nValue; ListNode *m_pNext; }; //合并两个有序链表,递归方法 ListNode *MergeTwoList(ListNode *pListOneHead, ListNode *pListTwoHead) { if (pListOneHead == NULL) { return pListTwoHead; } if (pListTwoHead == NULL) { return pListOneHead; } ListNode *pMergeListHead = NULL; if (pListOneHead->m_nValue < pListTwoHead->m_nValue) { pMergeListHead = pListOneHead; pMergeListHead->m_pNext = MergeTwoList(pMergeListHead->m_pNext, pListTwoHead); } else { pMergeListHead = pListTwoHead; pMergeListHead->m_pNext = MergeTwoList(pListOneHead, pMergeListHead->m_pNext); } return pMergeListHead; }
相关文章推荐
- 面试题15:输入一个链表,输出该链表中倒数第k个结点。
- 面试题16:反转链表
- 展望未来,总结过去10年的程序员生涯
- 黑马程序员——IO流8:IO流综合练习
- 黑马程序员-Java之匿名内部类
- 黑马程序员——正则表达式和网页爬虫
- 黑马程序员——IO流7:其他IO技术介绍-下
- 面试题14:调整数组顺序
- 黑马程序员——线程间通信
- 爱折腾的女程序员
- 面试题13:在O(1)的时间删除链表结点
- 面试题12:打印1到最大的n位数
- 软件测试-职业发展-邱建忠
- 黑马程序员——OC面向对象的基础认识
- 测试工程师职业规划
- 中软的测试面试题
- 软件面试题-灵活
- 英文面试
- LoadRunner英语面试问题(附答案)
- 【转载】解析测试工程师职业发展瓶…