注:本人菜雞乙個,以後就在leetcode刷刷題這裡就隨便寫點刷題體會吧
鍊錶以前還是寫過的,但是不是特別清楚其中的一些實際操作,這次寫問題 2. add two numbers,就出現了點小麻煩。
1.leetcode報錯:member access within null pointer of type 『struct listnode』
這是我在使用指標p作為儲存二者相加的各位數字是剛開始的錯誤。這就是說我使用的指標p可能是個空指標。剛開始我是將p=result->next(result是我malloc過的),而且在迴圈是的判斷也沒有p!=null。
struct listnode* result=(struct listnode*)malloc(sizeof(struct listnode));
struct listnode* p=resul->next;
int low_digit=0;
int high_digit=0;
while((l1!=null)&&(l2!=null))
後來將p=result,在迴圈判斷中加上p!=null解決。
struct listnode* result=(struct listnode*)malloc(sizeof(struct listnode));
struct listnode* p=result;
int low_digit=0;
int high_digit=0;
while((l1!=null)&&(l2!=null)&&p!=null)
2.在每次迴圈中都申請了malloc了p->next,但是在當結果的位數與二者最大的位數相等時結果會多乙個0。
因為我申請之後p的最後val預設為0,當沒有該位是還是將0賦值,應該直接為null,所以加上乙個判斷條件。在滿足該條件時申請(多乙個0),不滿足時不申請直接返回即可。
舊**:
p->next=(struct listnode*)malloc(sizeof(struct listnode));
p=p->next;
新**:
if(high_digit==0&&l1->next==null&&l2->next==null)
p->next=(struct listnode*)malloc(sizeof(struct listnode));
p=p->next;
LeetCode 反轉鍊錶(鍊錶問題)
難度 簡單 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null使用三個listnode,分別是prev,curr,next。curr是當前指標指向的節點,prev是curr的前乙個節點,頭節點的前乙個節點是null,next是curr的下乙個節點,用於遍歷鍊...
leetcode 鍊錶的排序問題
題目描述 在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。例如 輸入 4 2 1 3 輸出 1 2 3 4。思路分析 因為要求在o nlogn 的時間複雜度,所以想到使用歸併排序。下面對歸併排序做個介紹。歸併排序 基本方法如下 1 把待排序序列的n個記錄看成n個有序子串行,每...
leetcode 相交鍊錶問題
目的 找到兩個鍊錶的相交節點並且返回該節點。示例 在節點c1處相交 演算法思想 因為兩個鍊錶的總長度一定,所以遍歷a b鍊錶,如果a b兩節點相交,則末尾節點一定相同。遍歷兩個單鏈表,若a鍊錶第一次遍歷完後,將該末尾節點指向b鍊錶的頭節點,同理,b鍊錶遍歷完後,將末尾節點指向a鍊錶的頭節點,如果遍歷...