题意:
输入两个单调递增的链表,输出两个链表合成后的链表,合成后的链表单调不减。
思路:
模拟链表操作
两个指针分别指向两个链表
比较当前位置的大小 选中小的加入新链表并下移
代码思路:
节点变量:head保存函数返回的新链表指针
before(应该改成last)用于新链表加入新节点时找到当前末尾节点
list1 list2指向两个节点未处理的节点位置
初始化头节点
当两个链表都不为空时,循环比较大小,选取新加入的节点。
有一个为空时,将余下节点加入
注意
判断条件的空指针异常
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode head,before;
if(list1==null&&list2==null)return null;
if(list1==null||((list2!=null)&&list1.val> list2.val)){
head=list2;
before=list2;
list2=list2.next;
}
else {
head = list1;
before = list1;
list1 = list1.next;
}
while (list1!=null&&list2!=null){
if(list1.val> list2.val){
before.next=list2;
list2=list2.next;
}
else{
before.next=list1;
list1=list1.next;
}
before= before.next;
}
if (list1!=null){
before.next=list1;
}
else if(list2!=null){
before.next=list2;
}
return head;
}
}