题目描述
将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// write code here
// 首先判断是否为空,不然在后面可能出现段错误!
if(l1 == NULL){
return l2;
}
if(l2 == NULL){
return l1;
}
ListNode* head ;
if(l1->val <= l2->val){
head = l1;
l1 = l1->next;
}
else{
head = l2;
l2 = l2->next;
}
ListNode* temp = head;
while(l1 != NULL && l2 != NULL){
if(l1->val <= l2->val){
temp->next = l1;
l1 = l1->next;
}
else{
temp->next = l2;
l2 = l2->next;
}
temp = temp->next;
}
if(l1 != NULL){
temp->next = l1;
}
if(l2 != NULL){
temp->next = l2;
}
return head;
}
};
错因分析
- 第一次错在循环里temp指针忘了指向自身的next了
- 有个一直都有的错误就是在确定头结点是从l1还是l2开始前,没有对l1和l2进行是否为空的判断,导致一直报错