题目描述:
将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。
解题思路:
1.先做非空链表判断,如果链表1为空返回链表2,链表2为空则返回链表1;
2.定义两个链表结点,一个为新链表的头结点head
初始化为-1,另一个为新链表的当前结点cur
,并且cur
指向head
;
3.两个链表都不为空时进入循环,在循环体内判断链表1当前结点的值与链表2当前结点的值哪个小,cur
指向当前结点小的值,依次判断两个链表值;
4.当循环体执行完时说明此时要么链表1的值判断完了,要么是链表2的值判断完了,因此在循环体外加一条判断语句,如果链表1的当前结点为空,则让cur
指向当前链表2,否则指向链表1;
5.最后返回新结点的下一个结点。
完整代码如下所示:
public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
// write code here
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
ListNode head = new ListNode(-1);
ListNode cur = head;
while(l1 != null && l2 != null){
if(l1.val <= l2.val){
cur.next = l1;
l1 = l1.next;
}else{
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
if(l2 == null){
cur.next = l1;
}else{
cur.next = l2;
}
return head.next;
}