思路
就是用另个指针来遍历两个链表,每次移动一个,把当前两个指针中值最小的数作为最后的结果。
要注意链表为空的时候。我用的是101来判断,因为题目说最大是100。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if(list2 == null && list1 == null){
return list1;
}
ListNode res = new ListNode();
ListNode res1 =res;
int l = 0;
int r = 0;
while(list1 != null || list2 != null){
if(list1 == null){
l = 101;
}else{
l = list1.val;
}
if(list2 == null){
r = 101;
}else{
r = list2.val;
}
if(l==r && l==101){
break;
}
if(l == 101){
res1.next = new ListNode(r);
list2 = list2.next;
}else if(r == 101){
res1.next = new ListNode(l);
list1 = list1.next;
}else if(l <= r){
res1.next = new ListNode(l) ;
list1 = list1.next;
}else{
res1.next = new ListNode(r);
list2 = list2.next;
}
res1 = res1.next;
}
return res.next;
}
}
方法二:
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
ListNode res = new ListNode();
ListNode temp = res;
while(list1 != null && list2 != null){
if(list1.val<=list2.val){
temp.next = list1;
list1 = list1.next;
}else{
temp.next = list2;
list2 = list2.next;
}
temp = temp.next;
}
if(list1 == null){
temp.next = list2;
}
if(list2 == null){
temp.next = list1;
}
return res.next;
}