add-two-numbers-ii
注意:有一种好的方法,是将链表倒转,然后依次相加。
但是,按照题目要求,用了不改变原链表的方法。
就是将两个链表增加到相同长度,然后递归相加,子函数返回后处理进位。
https://leetcode.com/problems/add-two-numbers-ii/
package com.company; import java.util.*; class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class Solution { ListNode addTwo(ListNode l1, ListNode l2) { //System.out.printf("add two %d, %d \n", l1.val, l2.val); ListNode ret = new ListNode(l1.val + l2.val); if (l1.next != null && l2.next != null) { ret.next = addTwo(l1.next, l2.next); ret.val += ret.next.val / 10; ret.next.val = ret.next.val % 10; } else { ret.next = null; } return ret; } public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int l1len = 0; ListNode ln = l1; while (ln != null) { l1len++; ln = ln.next; } int l2len = 0; ln = l2; while (ln != null) { l2len++; ln = ln.next; } if (l1len < l2len) { ln = l1; l1 = l2; l2 = ln; l1len = l1len ^ l2len; l2len = l1len ^ l2len; l1len = l1len ^ l2len; } for (int i=0; i<l1len-l2len; i++) { ln = new ListNode(0); ln.next = l2; l2 = ln; } ln = addTwo(l1, l2); if (ln.val >= 10) { ListNode newHead = new ListNode(ln.val / 10); ln.val = ln.val % 10; newHead.next = ln; ln = newHead; } return ln; } } public class Main { public static void main(String[] args) { System.out.println("Hello!"); Solution solution = new Solution(); ListNode l1 = new ListNode(7); ListNode l11 = new ListNode(2); ListNode l12 = new ListNode(4); ListNode l13 = new ListNode(3); l1.next = l11; l11.next = l12; l12.next = l13; ListNode l2 = new ListNode(5); ListNode l21 = new ListNode(6); ListNode l22 = new ListNode(4); l2.next = l21; l21.next = l22; ListNode ret = solution.addTwoNumbers(l1, l2); System.out.printf("Get ret: \n"); while (ret != null) { System.out.printf("%d", ret.val); ret = ret.next; } System.out.println(); /*Iterator<List<Integer>> iterator = ret.iterator(); while (iterator.hasNext()) { Iterator iter = iterator.next().iterator(); while (iter.hasNext()) { System.out.printf("%d,", iter.next()); } System.out.println(); }*/ System.out.println(); } }
分类:
leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!