题目描述
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
- Input: 1->2->4, 1->3->4
- Output: 1->1->2->3->4->4
题目难度:Easy
AC代码1
自己写的代码,可以AC,但是很冗长。
/**
* 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) {
if(l1 == null) return l2;
if(l2 == null) return l1;
ListNode newHead = new ListNode(0);
ListNode curNode = newHead;
while(l1 != null && l2 != null){
if(l1.val == l2.val){
curNode.next = new ListNode(l1.val);
curNode.next.next = new ListNode(l2.val);
curNode = curNode.next.next;
l1 = l1.next;
l2 = l2.next;
}
else if(l1.val < l2.val){
curNode.next = new ListNode(l1.val);
curNode = curNode.next;
l1 = l1.next;
}
else {
curNode.next = new ListNode(l2.val);
curNode = curNode.next;
l2 = l2.next;
}
}
if(l1 != null) curNode.next = l1;
else if(l2 != null) curNode.next = l2;
return newHead.next;
}
}
AC代码2
leetcode 上面的优秀代码,经过了优化
/**
* 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 head = new ListNode(0);
ListNode p=head;
ListNode list1 = l1;
ListNode list2 = l2;
while(list1 !=null && list2!=null){
if(list1.val <=list2.val){
p.next = list1;
list1 = list1.next;
}
else{
p.next = list2;
list2 = list2.next;
}
p = p.next;
}
if(list1!=null){
p.next = list1;
}
if(list2!=null){
p.next = list2;
}
return head.next;
}
}