目录
题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:list1 = [1,2,4], list2 = [1,3,4] 输出:[1,1,2,3,4,4]
思路
思路:新建一个头、尾节点,指向空,然后list1和list2比较,第一次需要初始化新的头尾节点,之后谁小新的尾节点指向谁,直至其中一个链表结束。
代码
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
if(list1 == NULL && list2 == NULL)
return NULL;
if(list1 == NULL || list2 == NULL){
struct ListNode* head = list1 == NULL ? list2:list1;
return head;
}
struct ListNode* head, *tail;
head = tail = NULL;
struct ListNode* cur1 = list1;
struct ListNode* cur2 = list2;
while(cur1 && cur2){
if(cur1->val < cur2->val){
if(head == NULL){
head = tail = cur1;
cur1 = cur1->next;
}
else{
tail->next = cur1;
cur1 = cur1->next;
tail = tail->next;
}
}
else{
if(head == NULL){
head = tail = cur2;
cur2 = cur2->next;
}
else{
tail->next = cur2;
cur2 = cur2->next;
tail = tail->next;
}
}
}
if(cur1 == NULL){
tail->next = cur2;
}
else if(cur2 == NULL){
tail->next = cur1;
}
return head;
}