我一直在尝试调试这段将两个排序列表合并为一个排序列表的代码,我从 leetcode
编写了这个问题typedef struct{
int val;
struct ListNode *next;
}ListNode;
ListNode* mergeTwoLists(ListNode* l1,ListNode* l2){
ListNode* head=(l1!=NULL||l2!=NULL)?(ListNode*)malloc(sizeof(ListNode)):NULL;
ListNode* temp=head;
ListNode* temp1=l1;
ListNode* temp2=l2;
if(temp!=NULL){
while(temp1!=NULL&&temp2!=NULL){
temp->val=(temp1->val<=temp2->val)?temp1->val:temp2->val;
temp->next=(ListNode*)malloc(sizeof(ListNode));
temp=temp->next;
if(temp1->val<=temp2->val){
temp1=temp1->next;
}else{
temp2=temp2->next;
}
}
ListNode* temp3=(temp1!=NULL)?temp1:temp2;
while(temp3!=NULL){
temp->val=temp3->val;
temp3=temp3->next;
if(temp3!=NULL){
temp->next=(ListNode*)malloc(sizeof(ListNode));
}else{
temp->next=NULL;
}
}
}
return head;
}
逻辑对我来说似乎很好,但如果我们举个例子
假设我们将这两个列表传入
ListNode* mergeTwoLists(ListNode* l1,ListNode* l2)
l1->(1)->(3)->(4)->NULL
l2->(5)->(6)->(7)->NULL
我的结果:head->(1)->(3)->(4)->(7)->NULL
它应该是什么:head->(1)->(3)->(4)->(5)->(6)->(7)->NULL