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; 順序別搞錯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章