当前位置:   article > 正文

图解LeetCode——合并两个有序链表_两个链表归并为一个有序链表图解

两个链表归并为一个有序链表图解

如果你喜欢这篇文章的话,请给作者点赞+关注哟,你的支持是我不断前进的动力!

目录

题目描述:

解法: 

完整代码:

结果


题目链接:力扣

题目描述:

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

示例 1:

格式:

  1. class Solution {
  2. public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
  3. //代码
  4. }
  5. }

解法: 

第一步:

我们需要一开始设置一个虚拟节点,它的值为 -1(它的值可以设置为任何的数),我们在后序的操作中不需要关心它具体的值,设置任何值都可以,并且我们设置一个p指针指向它。

ListNode dummy = new ListNode(-1), p = dummy;

 第二步:

为了方便我们后序代码的输入,我们分别给两个链表取个别名(可以不取)。

  1. ListNode p1 = list1;
  2. ListNode p2 = list2;

第三步:

使用while循环,当我们的两个链表都不为空的时候进行遍历,在遍历的过程中不断的比较他们之间的值,让p的next指向值小的那一个。

 这个时候我们发现,链表一的值比链表二的值要小,我们将其放入到新链表中,完成后让 p1 = p1.next; p = p.next

  1. while(p1 != null && p2 != null){
  2. if(p1.val > p2.val){
  3. p.next = p2;
  4. p2 = p2.next;
  5. }else{
  6. p.next = p1;
  7. p1 = p1.next;
  8. }
  9. p = p.next;
  10. }

这个时候我们发现链表一已经为空了,但是链表二还没有为空,这个时候我们只需要将链表二后面的结点拼接到新链表上就可以啦

 

  1. if(p1 != null){
  2. p.next = p1;
  3. }
  4. if(p2 != null){
  5. p.next = p2;
  6. }

这个时候我们只需要返回虚拟结点的下一个结点就是我们的新链表啦 

 完整代码:

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

结果

如果你喜欢这篇文章的话,请给作者点赞哟,你的支持是我不断前进的动力。

因为作者能力水平有限,欢迎各位大佬指导。

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

闽ICP备14008679号