将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
第一个版本(出错)说明错误原因
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
/*思路:
1、比较两个链表的第一个节点,把小的那个取出来当做新链表的头节点,如果相等的话,都取出来,向下移动节点
2、直到有一个链表为空
3、将不为空的那个链表剩下的节点插入到新链表当中
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode res = new ListNode(0);//创建一个新的链表
ListNode firstNode = res;
//错误点一:这里没有判断当l1为空或者l2为空的时候怎么处理
while(l1 != null && l2 != null ){
if(l1.val <= l2.val){
res.next = l1;
l1 = l1.next;
//错误二:
第一步:将l1插入到res中“ res.next = l1;”
第二步:指向l1的指针向后移动一个
第三步:新链表的指针向后移动一个(这里缺少了)
}else{
res.next = l2;
l2 = l2.next;
//错误原因同上
}
}
while(l1 != null){
res.next = l1;
l1 = l1.next;
res = res.next;
}
while(l2 != null){
res.next = l2;
l2 = l2.next;
res = res.next;
}
return firstNode.next;
}
}
只要添加上那两行代码就行了