天天看點

leetcode 2. Add Two Numbers(連結清單加法)

https://leetcode.com/problems/add-two-numbers/

題意:給定兩個連結清單,要你求這個兩個連結清單相加形成的新連結清單。(就是連結清單的節點都有一個數字,一個連結清單就可以組成一個數)

思路:c++做就太簡單了,因為有指針,一個while循環就行。

這題我用的java,java裡面沒有指針,那我就隻能遞歸來搞了。我覺得代碼寫的非常清楚。

反思:這種題考了基礎的資料結構又考了程式設計實作能力,可以說非常基礎了。以後要習慣沒有指針寫法。

代碼:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
      public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode listNode = new ListNode(0);
        dfs(l1,l2,listNode,0);
        return listNode;
    }
//f為進位标志
    private void dfs(ListNode l1, ListNode l2,ListNode ans,int f){
        if(l1==null&&l2==null&&f==0) return;
        if(l1==null)
        {
            l1 = new ListNode(0);
        }
        if(l2==null)
        {
            l2=new ListNode(0);
        }
        ans.val=(l1.val+l2.val+f)%10;
        f=(l1.val+l2.val+f)/10;
        if(l1.next!=null||l2.next!=null||f!=0) {
            ans.next = new ListNode(0);
            dfs(l1.next, l2.next, ans.next, f);
        }
    }
}