合成两个有序链表
题目要求:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
解题方法:
1 .递归法
2. 递归法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
//递归法
/**if (l1 == NULL) {
return l2;
} else if (l2 == nullptr) {
return l1;
} else if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
**/
//迭代法
struct ListNode* prehead=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* pre=prehead;
prehead->val=-1;prehead->next=NULL;
while(list1!=NULL&&list2!=NULL){
if(list1->val<=list2->val){
pre->next=list1;
list1=list1->next;
}
else{
pre->next=list2;
list2=list2->next;
}
pre=pre->next;
}
pre->next=list1==NULL?list2:list1;
return prehead->next;
}