- 链接 :原题
- 题意 : 两个有序链表进行合并。
- 思路:
这个是经典的数据结构链表题,考研的时候在王道里面看到过,是一种经典的归并思想,也就是迭代。用的是尾插法。
如果两个链表 l1 和 l2都不为空,那就比较两个数,较小的插入到 ans 表尾,更新节点,直到其中有一个链表为空。
然后省下来的那个不为空的再逐渐添加到后面。
- 代码:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* root = new ListNode;
ListNode* ans = root;
while(l1 != NULL && l2 != NULL){
ListNode* tmp = new ListNode;
if(l1->val <= l2->val){
tmp->val = l1->val;
l1 = l1->next;
}else{
tmp->val = l2->val;
l2 = l2->next;
}
root->next = tmp;
root = tmp;
}
while(l1 != NULL){
root->next = l1;
root = l1;
l1 = l1->next;
}
while(l2 != NULL){
root->next = l2;
root = l2;
l2 = l2->next;
}
if(ans->next != NULL){
return ans->next;
}
return NULL;
}
};
- 遇到的问题:
因为链表问题不怎么遇到,所以有些陌生。
(1)链表节点声明, ListNode* a = new ListNode;
(2)尾插法, root->next = tmp; root = tmp; 顺序别搞错。