两个排序链表的合并(Easy)

问题来源:选自leetcode 21:合并两个有序链表

问题描述: 

题目给定信息:

  给定两个有序链表,把两个链表合并成一个链表,并且合并后的链表依然是有序的。这两个链表中允许有重复元素

问题分析:

  设置一个临时头节点,同时遍历两个原链表,遍历循环的条件是两个链表都不为空的情况下循环才能继续执行。每次遍历两个链表的节点都要比较两个节点的大小,然后把较小的哪一个节点保存在新建临时头节点所表示链表中。但我们要考虑一些特殊的情况,两个链表长度不一样的时候,当循环推出时候还会有一个链表没有遍历结束,这时候我们要判断是哪一个,然后把没有遍历完的链表直接放在新链表的后面即可。

函数实现:

 1 public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
 2         ListNode newHead = new ListNode(-1);
 3         ListNode pre = newHead;
 4         while(l1!=null&&l2!=null) {
 5             if(l1.val<=l2.val) {
 6                 pre.next = l1;
 7                 l1 = l1.next;
 8             }else {
 9                 pre.next = l2;
10                 l2 = l2.next;
11             }
12             pre = pre.next;
13         }
14         if(l1!=null) {
15             pre.next = l1;
16         }
17         if(l2!= null) {
18             pre.next = l2;
19         }
20         return newHead.next;
21     }

运行结果:

 

posted @ 2019-04-10 22:36  包子的百草园  阅读(137)  评论(0编辑  收藏  举报