思路:题目要求 将两个有序链表合并成新的有序链表
1.先创建一个新的链表,创建头结点方便尾插元素
2.遍历两个有序链表,比较两个链表的val值,较小的一个放入新链表中
3.返回新链表
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if(null == list1 && null == list2){
return null;
}
//其中一个链表为空,返回另一个链表
if(null == list1){
return list2;
}
if(null == list2){
return list1;
}
ListNode ListA = new ListNode(0);//创建新链表
ListNode ListAhead = ListA;//新链表 头节点
ListNode cur1 = list1;
ListNode cur2 = list2;
while(null != cur1 && null != cur2){//遍历两个链表 较小值放到新链表里
if(cur1.val < cur2.val){
ListAhead.next = cur1;//增加新节点
cur1 = cur1.next;//节点后移
}else{
ListAhead.next = cur2;
cur2 = cur2.next;
}
//头结点后移 尾插法结束
ListAhead = ListAhead.next;
}
//结束后 一定有一个或者两个链表遍历完了 把没遍历完的链表 接在新链表后面 否则不进入if else
if(null == cur1){
ListAhead.next = cur2;
}else{
ListAhead.next = cur1;
}
return ListA.next;//跳过元素为0的头结点
}
}
运行结果: