当前位置:   article > 正文

Java题目详解——LeetCode21.合并两个有序链表_leetcode java 合并两个有序链表

leetcode java 合并两个有序链表

目录

题目链接:LeetCode21.合并两个有序链表

一.题目要求

二.解题思路

三.具体代码

四.运行截图


题目链接:LeetCode21.合并两个有序链表

一.题目要求

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

二.解题思路

        首先我们可以新建一个新链表,然后同时循环遍历list1和list2,因为他们是两条升序链表,所以在循环中可以通过比较这两条链表的结点元素的大小,将较小的尾插至新链表中,当其中一条链表遍历完时,将另一条链表剩下的结点全部接到新链表后面即可。

注意:

        设置新链表时,要设置头结点(ansHead)和尾结点(ansLast),头结点是为了返回新链表,尾结点是为了进行尾插元素的操作。

        返回值是头结点的下一结点,即合并两个链表的开始。

return ansHead.next;

画图举例理解:

三.具体代码

  1. class Solution {
  2. public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
  3. ListNode head1=list1;
  4. ListNode head2=list2;
  5. ListNode ansHead=new ListNode();
  6. ListNode ansLast=ansHead;
  7. while(head1!=null&&head2!=null){
  8. if(head1.val<=head2.val){
  9. ansLast.next=head1;
  10. ansLast=ansLast.next;
  11. head1=head1.next;
  12. }else{
  13. ansLast.next=head2;
  14. ansLast=ansLast.next;
  15. head2=head2.next;
  16. }
  17. }
  18. if(head1!=null){
  19. ansLast.next=head1;
  20. }else{
  21. ansLast.next=head2;
  22. }
  23. return ansHead.next;
  24. }
  25. }

四.运行截图

如想了解链表(LinkedList)相关知识,请查阅:

LinkedList(链表)的介绍及自我实现

如有建议或想法,欢迎一起讨论学习~

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

闽ICP备14008679号