码迷,mamicode.com
首页 > 其他好文 > 详细

21.合并两个有序链表

时间:2020-01-18 21:04:01      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:value   代码   不为   solution   相同   对象   ret   lse   null   

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

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
      ListNode prevNode = new ListNode(-1);
      ListNode prev = prevNode;
      while(l1 != null && l2 != null){
          if(l1.val < l2.val){
              prevNode.next = l1;
              l1 = l1.next;
          }else{
              prevNode.next = l2;
              l2 = l2.next;
          }
          prevNode = prevNode.next;
      }
      prevNode.next = l1 == null ? l2 : l1;
      return prev.next;
}
}
 
 
思路:
  先创建一个虚拟头结点,再创建一个节点对象指向这个虚拟头结点,虚拟头结点所在的链表则是新的有序链表
当l1不为空且l2也不为空时{
 判断:
  如果l1的value小于l2的value
    让虚拟头结点的next指向l1,接着l1顺移指向l1.next
  其他情况下(即l1.value <= l2.value)
    让虚拟头结点的next指向l2,接着l2顺移指向l2.next
  做完上述任一操作后,让虚拟头结点顺移指向它的next                   
}                                           
为了能遍历完至少一个链表,应该给上述条件加一个循环的条件,让其循环执行
跳出上述循环的条件有三种
1.l1为空
2. l2为空
3. l1且l2都为空
因为l1和l2都为有序链表,所以在1和2的情况下,剩下的非空的链表中的剩余元素都比新有序链表的元素大,且都是有序的
所以直接把新有序链表的尾部接上剩下的非空的链表中的剩余元素
第三种情况,让其尾部指向null,因为都为空即l1和l2的元素数量相同且所有元素都已加入新的有序链表中了
最后返回指向这个虚拟头结点的节点对象的next,即新有序链表的头部

21.合并两个有序链表

标签:value   代码   不为   solution   相同   对象   ret   lse   null   

原文地址:https://www.cnblogs.com/hzqshuai/p/12210019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!