当前位置:   article > 正文

两个有序链表序列的合并(java实现)_java 合并两个有序链表

java 合并两个有序链表
02-线性结构1 两个有序链表序列的合并(15 分)

本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。

函数接口定义:

List Merge( List L1, List L2 );

输入样例:

  1. 3
  2. 1 3 5
  3. 5
  4. 2 4 6 8 10

输出样例:

  1. 1 2 3 4 5 6 8 10
  2. NULL
  3. NULL

思路:

1、两个链表,比较元素大小之后指针后移,最后把某个链表剩余的元素添加进来。

2、就不输出null null了。

  1. import java.util.Iterator;
  2. import java.util.LinkedList;
  3. import java.util.Scanner;
  4. public class Main {
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. LinkedList<Integer> L1 = new LinkedList<>();
  8. LinkedList<Integer> L2 = new LinkedList<>();
  9. Scanner in = new Scanner(System.in);
  10. int n1 = in.nextInt();
  11. for(int i = 0 ;i<n1;i++) {
  12. L1.add(in.nextInt());
  13. }
  14. int n2 = in.nextInt();
  15. for(int i = 0 ;i<n2;i++) {
  16. L2.add(in.nextInt());
  17. }
  18. LinkedList<Integer> Lt = merge( L1, L2);
  19. System.out.println(Lt);
  20. }
  21. public static LinkedList<Integer> merge(LinkedList<Integer> L1,LinkedList<Integer> L2) {
  22. Iterator<Integer> it1 = L1.iterator();
  23. Iterator<Integer> it2 = L2.iterator();
  24. LinkedList<Integer> L3 = new LinkedList<>();
  25. int n1 = L1.size();
  26. int n2 = L2.size();
  27. // System.out.println(n1+" "+n2);
  28. Integer m1=0,m2=0;
  29. if(it1.hasNext())
  30. m1 = it1.next();
  31. if(it2.hasNext())
  32. m2 = it2.next();
  33. for(int i = 1,j = 1 ; i<=n1&&j<=n2 ; ) {
  34. switch(compare(m1,m2)) {
  35. case 1 : {
  36. L3.add(m2);
  37. j++;
  38. if(it2.hasNext())
  39. m2=it2.next();
  40. };
  41. break;
  42. case -1: {
  43. L3.add(m1);
  44. i++;
  45. if(it1.hasNext())
  46. m1=it1.next();
  47. };
  48. break;
  49. case 0 :{
  50. L3.add(m1);
  51. L3.add(m2);
  52. i++;
  53. j++;
  54. if(it1.hasNext())
  55. m1=it1.next();
  56. if(it2.hasNext())
  57. m2=it2.next();
  58. };
  59. break;
  60. default: break;
  61. }
  62. }
  63. if(it1.hasNext())
  64. {
  65. L3.add(m1);
  66. while(it1.hasNext())
  67. {
  68. L3.add(it1.next());
  69. }
  70. }
  71. else
  72. {
  73. L3.add(m2);
  74. while(it2.hasNext())
  75. {
  76. L3.add(it2.next());
  77. }
  78. }
  79. return L3;
  80. }
  81. private static int compare(Integer m1, Integer m2) {
  82. // TODO Auto-generated method stub
  83. if(m1>m2)
  84. return 1;
  85. else if(m1==m2)
  86. return 0;
  87. else
  88. return -1;
  89. }
  90. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/编程挑战者/article/detail/62926
推荐阅读
相关标签
  

闽ICP备14008679号