You are given the heads of two sorted linked lists list1
and list2
.
Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.
Example One:
Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]
Solution:
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
/**
Recursion Solution:
if(list1 == null) return list2;
if(list2 == null) return list1;
ListNode head;
if(list1.val > list2.val){
head = list2;
list2 = list2.next;
}else{
head = list1;
list1 = list1.next;
}
head.next = mergeTwoLists(list1, list2);
return head;
*/
ListNode head = new ListNode();
ListNode tail = head;
while(list1 != null && list2 != null){
if(list1.val < list2.val){
tail.next = list1;
list1 = list1.next;
}else{
tail.next = list2;
list2 = list2.next;
}
tail = tail.next;
}
if(list1 != null){
tail.next = list1;
}else{
tail.next = list2;
}
return head.next;
}
}
Hints:
Logics:
- Have a ListNode (Head)
- Find the smallest node and set it to head
- change the head to each list
- set the head for the the list that we want
- return the result
Tips:
- Don't forget to set the head for each List
- if there are node left whatever listone or listtwo, just follow the result, because their value will be greater than others