合并两个有序链表
21. 合并两个有序链表 - 力扣(LeetCode) (leetcode-cn.com)
- 定义两个链表
head
,tail
; - 遍历两个链表
list1
,list2
,找最小。找到后,tail
接上,然后移动tail
至list1
或list2
。list1
或list2
后移。 - 把未遍历过的接到
tail
后。
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
if(list1 == NULL && list2 == NULL)
return NULL;
if(list1 == NULL && list2 != NULL)
return list2;
if(list1 != NULL && list2 == NULL)
return list1;
// 1. 定义两个链表head,tail;
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *tail;
if(head)
tail = head;
else
return NULL;
// 2. 遍历两个链表list1,list2,找最小。找到后,tail接上,然后移动tail至list1或list2。list1或list2后移。
while(list1 && list2)
{
if(list1->val < list2->val)
{
tail->next = list1;
tail = list1;
list1 = list1->next;
}
else
{
tail->next = list2;
tail = list2;
list2 = list2->next;
}
}
// 3. 把未遍历过的接到tail后。
if(list1)
tail->next = list1;
if(list2)
tail->next = list2;
head = head->next;
return head;
}