剑指 Offer 25. 合并两个排序的链表
Difficulty: 简单
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
注意:本题与主站 21 题相同:
Solution
Language: java
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
if(l1 == null) return l2;
if(l2 == null) return l1;
// write code here
ListNode dummy = new ListNode(0);
ListNode current = dummy;
while(l1 != null && l2 != null)
{
int v1 = l1.val;
int v2 = l2.val;
if(v1 > v2)
{
ListNode node = new ListNode(v2);
current.next = node;
current = current.next;
l2 = l2.next;
}
else if(v1 < v2)
{
ListNode node = new ListNode(v1);
current.next = node;
current = current.next;
l1 = l1.next;
}
else{
ListNode node = new ListNode(v1);
current.next = node;
current = current.next;
ListNode node2 = new ListNode(v2);
current.next = node2;
current = current.next;
l1 = l1.next;
l2 = l2.next;
}
}
while(l1 != null)
{
int v1 = l1.val;
ListNode node = new ListNode(v1);
current.next = node;
current = current.next;
l1 = l1.next;
}
while(l2 != null)
{
int v2 = l2.val;
ListNode node = new ListNode(v2);
current.next = node;
current = current.next;
l2 = l2.next;
}
return dummy.next;
}
}
- 这种方式代码重复率太高了,我们试着优化下
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode current = dummy;
while(l1 != null && l2 != null)
{
if(l1.val > l2.val)
{
current.next = new ListNode(l2.val);
l2 = l2.next;
}
else
{
current.next = new ListNode(l1.val);
l1 = l1.next;
}
current = current.next;
}
current.next = l1 == null ? l2 : l1;
return dummy.next;
}
}