leetcode21. 合併兩個有序鏈表

此次作業一開始犯了兩個錯誤:

  1. 新建節點時,應該使用new進行創建,要理解清楚節點和指針的區別

  2. 在之後拼接時,一開始錯誤的使用了while,導致無限循環,引起超時,注意if和while的使用

  3.頭指針和尾指針的使用

//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 *ret = ListNode(0);寫法錯誤,均差一個new
        //ListNode *l3 = ListNode(min(l1->val,l2->val));
        ListNode *ret = new ListNode(0);//新節點一定要重新分配內存
        ListNode *L1 = l1;
        ListNode *L2 = l2;
        ListNode *L3 = ret;
        while(L1&&L2){
            if(L1->val < L2->val){
            
                L3->next = L1;
                L3 = L3->next;
                L1 = L1->next;

            }
            else{
                L3->next = L2;            
                L3 = L3->next;
                L2 = L2->next;
            }
        } 
        //while(L1)之前最開始的時候,用的while,這樣會無限循環下去。
        if(L1){
            L3->next = L1;
        }
        if(L2){
            L3->next = L2;
        }
        return ret->next; 
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章