LeetCode 21 合并两个有序链表——归并

  • 链接 :原题
  • 题意 : 两个有序链表进行合并。
    在这里插入图片描述
  • 思路:
    这个是经典的数据结构链表题,考研的时候在王道里面看到过,是一种经典的归并思想,也就是迭代。用的是尾插法。
    如果两个链表 l1 和 l2都不为空,那就比较两个数,较小的插入到 ans 表尾,更新节点,直到其中有一个链表为空。
    然后省下来的那个不为空的再逐渐添加到后面。
  • 代码:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
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; 顺序别搞错。

おすすめ

転載: blog.csdn.net/qq_39763472/article/details/105879724