问题来源:选自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 }
运行结果: