题目:
是否独立解出:否
解题时的思路与想法:解题时有几个问题:
1.怎么遍历两个数组,嵌套两个while循环不能实现(后面通过看题解知道list1!=null&&list2!=null)
2.指定哪个链表为头结点(最开始想通过if语句在while循环的时候判断一下),后面通过看题解知道,可以提前创建一个new ListNode(-1)作为头结点
3.还有一个问题,就是最开始没有看懂为什么创建了头结点,ListNode prev=new ListNode(-1);后,还要创建一个ListNode pre = prev; ,后面了解到,prev只是作为头结点,静止不动,而pre需要不断去两个链表跳转。
4.关于返回值问题(一直以来是我比较迷惑的地方),如果返回list1或者2的话,只能返回一部分的节点值,返回pre则只会返回到最后一个节点(个人推测不确定对错)
解题思路:创建一个节点作为头结点,然后同时通过while循环遍历两个数组,用if语句判断出最小的那一个list,则用pre指向他,然后被指向的那个list向后移一位。然后pre也要随着list1与list2的比较大小不断地移动自己的位置。在结束循环之后,两个链表的长度可能并不是一样的,所以要把长的那一端直接添加到新链表最后面,返回头结点的下一个即可
解题代码:
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode prev =new ListNode(-1);
ListNode pre =prev;
if(list1==null&&list2==null){return null;}
if(list1==null){return list2;}
if(list2==null){return list1;}
while(list1!=null&&list2!=null){
if(list2.val>=list1.val){
pre.next=list1;
list1=list1.next;
}else{
pre.next=list2;
list2=list2.next;
}
pre=pre.next;
}
pre.next=list1==null?list2:list1;
return prev.next;
}
}