天天看点

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