|
题目大意:给定两个有序链表,然后合并成一个新的链表并返回头指针。
分析:这种题目算法一般不难,主要是对链表操作的时候NULL指针的坑比较多。这道题主要有以下几种情况:
1.两个链表均为NULL;
2.一个为NULL,一个不为NULL;
3.两个链表均还有元素;
要注意的一个点是,每次我们仅对取出元素的链表移动到下一个元素即可。
代码:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
int minm = 0x3f3f3f;
if(l1 == NULL && l2 == NULL) {
return NULL;
}
if(l1 == NULL || l2 == NULL) {
if(l1 == NULL) {
minm = l2 -> val;
l2 = l2 -> next;
} else {
minm = l1 -> val;
l1 = l1 -> next;
}
} else {
if(l1->val > l2->val) {
minm = l2->val;
l2 = l2->next;
} else {
minm = l1->val;
l1 = l1->next;
}
}
ListNode *tmp = new ListNode(minm);
ListNode *head = tmp;
while(l1 != NULL || l2 != NULL) {
int min1 = 0x3f3f3f, min2 = 0x3f3f3f;
if(l1 != NULL) {
min1 = l1->val;
}
if(l2 != NULL) {
min2 = l2->val;
}
int minm;
if(min1 > min2) {
minm = min2;
l2 = l2 -> next;
} else {
minm = min1;
l1 = l1 -> next;
}
ListNode *tmp1 = new ListNode(minm);
tmp->next = tmp1;
tmp = tmp->next;
}
return head;
}
|