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);
}
}
}