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