P114、面试题17:合并两个排序的链表
2015-11-03 15:08
453 查看
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增顺序的。
struct ListNode{
int m_nKey;
ListNode* m_pNext;
}
测试用例:
1)功能测试(输入的两个链表有多个结点,结点的值互不相同或者存在值相等的多个结点);
2)特殊输入测试(两个链表的一个或者两个头结点为null指针、两个链表中只有一个结点)。
实现代码:
输出结果:
Test1 begins:
The first list is:
1 3 5
The second list is:
2 4 6
The merged list is:
1 2 3 4 5 6
Test2 begins:
The first list is:
1 3 5
The second list is:
1 3 5
The merged list is:
1 1 3 3 5 5
Test3 begins:
The first list is:
1
The second list is:
2
The merged list is:
1 2
Test4 begins:
The first list is:
1 3 5
The second list is:
The merged list is:
1 3 5
Test5 begins:
The first list is:
The second list is:
The merged list is:
struct ListNode{
int m_nKey;
ListNode* m_pNext;
}
测试用例:
1)功能测试(输入的两个链表有多个结点,结点的值互不相同或者存在值相等的多个结点);
2)特殊输入测试(两个链表的一个或者两个头结点为null指针、两个链表中只有一个结点)。
实现代码:
package com.yyq; /** * Created by Administrator on 2015/9/15. */ public class Merge { public static ListNode merge(ListNode pHead1, ListNode pHead2){ if (pHead1 == null) return pHead2; else if(pHead2 == null) return pHead1; ListNode pMergedHead = null; if (pHead1.getM_nValue() < pHead2.getM_nValue()){ pMergedHead = pHead1; pMergedHead.setM_pNext(merge(pHead1.getM_pNext(), pHead2)); } else{ pMergedHead = pHead2; pMergedHead.setM_pNext(merge(pHead1,pHead2.getM_pNext())); } return pMergedHead; } public static void printList(ListNode pListHead) { if (pListHead == null) return; ListNode pNode = pListHead; while (pNode != null) { System.out.print(pNode.getM_nValue() + " "); pNode = pNode.getM_pNext(); } System.out.println(); } // ====================测试代码==================== public static ListNode Test(String testName, ListNode pHead1, ListNode pHead2) { if(testName != null) System.out.println(testName+" begins:"); System.out.println("The first list is:"); printList(pHead1); System.out.println("The second list is:"); printList(pHead2); System.out.println("The merged list is:"); ListNode pMergedHead = merge(pHead1, pHead2); printList(pMergedHead); return pMergedHead; } // list1: 1->3->5 // list2: 2->4->6 public static void Test1() { ListNode pNode1 = new ListNode(1); ListNode pNode3 = new ListNode(3); ListNode pNode5 = new ListNode(5); pNode1.setM_pNext(pNode3); pNode3.setM_pNext(pNode5); ListNode pNode2 = new ListNode(2); ListNode pNode4 = new ListNode(4); ListNode pNode6 = new ListNode(6); pNode2.setM_pNext(pNode4); pNode4.setM_pNext(pNode6); Test("Test1", pNode1, pNode2); pNode1 = null; pNode2 = null; } // 两个链表中有重复的数字 // list1: 1->3->5 // list2: 1->3->5 public static void Test2() { ListNode pNode1 = new ListNode(1); ListNode pNode3 = new ListNode(3); ListNode pNode5 = new ListNode(5); pNode1.setM_pNext(pNode3); pNode3.setM_pNext(pNode5); ListNode pNode2 = new ListNode(1); ListNode pNode4 = new ListNode(3); ListNode pNode6 = new ListNode(5); pNode2.setM_pNext(pNode4); pNode4.setM_pNext(pNode6); Test("Test2", pNode1, pNode2); pNode1 = null; pNode2 = null; } // 两个链表都只有一个数字 // list1: 1 // list2: 2 public static void Test3() { ListNode pNode1 = new ListNode(1); ListNode pNode2 = new ListNode(2); Test("Test3", pNode1, pNode2); pNode1 = null; pNode2 = null; } // 一个链表为空链表 // list1: 1->3->5 // list2: 空链表 public static void Test4() { ListNode pNode1 = new ListNode(1); ListNode pNode3 = new ListNode(3); ListNode pNode5 = new ListNode(5); pNode1.setM_pNext(pNode3); pNode3.setM_pNext(pNode5); Test("Test4", pNode1, null); pNode1 = null; } // 两个链表都为空链表 // list1: 空链表 // list2: 空链表 public static void Test5() { Test("Test5", null, null); } public static void main(String[] args) { Test1(); Test2(); Test3(); Test4(); Test5(); } }
输出结果:
Test1 begins:
The first list is:
1 3 5
The second list is:
2 4 6
The merged list is:
1 2 3 4 5 6
Test2 begins:
The first list is:
1 3 5
The second list is:
1 3 5
The merged list is:
1 1 3 3 5 5
Test3 begins:
The first list is:
1
The second list is:
2
The merged list is:
1 2
Test4 begins:
The first list is:
1 3 5
The second list is:
The merged list is:
1 3 5
Test5 begins:
The first list is:
The second list is:
The merged list is:
相关文章推荐
- 裸辞一个月的心路历程和面试心得
- Java程序员应该知道的10个调试技巧
- 成为专业程序员的 6 个技巧—兄弟连IT教育
- 黑马程序员---集合框架(二)
- Hadoop之应用程序运行过程(面试)
- Android面试题汇总
- 有人认为,“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么?
- 2015阿里实习生内推面经
- 黑马程序员——Foundation框架—文件操作
- 面试知识点总汇
- leetcode 240 : Search a 2D Matrix II
- 黑马程序员---IO流1(其他对象、FileWriter、FileReader)
- 程序员的自我修养修订篇
- 黑马程序员——Foundation框架—NSArray
- 黑马程序员——Foundation框架—字符串方法
- 黑马程序员——iOS主要框架
- 如何跟程序员谈一场没有Bug的恋爱
- strcpy/strlen/strcat/strcmp面试总结
- C#程序员最易犯的编程错误
- 海量数据处理:十道面试题与十个海量数据处理方法总结