当前位置:   article > 正文

如何合并两个有序链表(以O(n)的时间复杂度并且不开辟新的空间)_合并两个有序链表不申请额外空间

合并两个有序链表不申请额外空间

这个算法的最重要的思想是,只需要遍历一个链表即可,每次再合适的位置往便利的链表中插入第二个链表的值。

下面就来说一下算法实现原理:

1、遍历第一个链表。

2、因为链表有序,所以只需将第二个链表中的值一个一个插入进去,一遍循环就能完成。

3、特别需要注意头节点插入和第二个链表遍历完的情况。

算法的具体实现:

  1. package classLearn;
  2. public class SortForLink {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. int[] arr1 = {1,3,6,8,23,34,56,77,90};
  6. int[] arr2 = {-90,34,55,79,87,98,123,234,567};
  7. Node link1 = new Node();
  8. Node link2 = new Node();
  9. Node link3 = new Node();
  10. getLink(arr1,link1);
  11. getLink(arr2,link2);
  12. mergeLink(link1, link2, link3);
  13. viewLink(link3);
  14. }
  15. /**
  16. * 构建链表
  17. * @param arr
  18. * @param link
  19. */
  20. public static void getLink(int[] arr, Node link) {
  21. for(int i = 0; i < arr.length; i++) {
  22. link.setNumber(arr[i]);
  23. link.setNext(new Node());
  24. link = link.getNext();
  25. }
  26. }
  27. /*
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/思考机器3/article/detail/62934
推荐阅读
相关标签
  

闽ICP备14008679号