作者:编舞木煜率_841 | 来源:互联网 | 2024-12-20 20:40
本篇文章介绍如何将两个分别表示整数的链表进行相加,并生成一个新的链表。每个链表节点包含0到9的数值,如9-3-7和6-3相加得到1-0-0-0。通过反向处理链表、逐位相加并处理进位,最终再将结果链表反向,即可完成计算。
本文将探讨如何将两个链表表示的整数相加,并生成一个新链表表示其和。每个链表节点包含0到9之间的数值。
例如:链表 9->3->7 和 6->3 相加的结果是 1->0->0->0。
解决方案如下:
- 首先,将两个链表分别反转。
- 然后,从头开始逐位相加两个反转后的链表,同时处理进位。
- 最后,将得到的结果链表再次反转,以获得正确的顺序。
1 // 将两个链表相加生成新链表
2 public static Node addTwoNumbers(Node l1, Node l2) {
3 if (l1 == null) return l2;
4 if (l2 == null) return l1;
5
6 // 反转链表
7 l1 = reverseList(l1);
8 l2 = reverseList(l2);
9
10 Node dummyHead = new Node(0);
11 Node current = dummyHead;
12 int carry = 0;
13
14 while (l1 != null || l2 != null || carry != 0) {
15 int sum = (l1 != null ? l1.val : 0) + (l2 != null ? l2.val : 0) + carry;
16 carry = sum / 10;
17 current.next = new Node(sum % 10);
18 current = current.next;
19
20 if (l1 != null) l1 = l1.next;
21 if (l2 != null) l2 = l2.next;
22 }
23
24 // 再次反转结果链表以恢复正确顺序
25 return reverseList(dummyHead.next);
26 }
27
28 private static Node reverseList(Node head) {
29 Node prev = null;
30 Node current = head;
31 while (current != null) {
32 Node nextTemp = current.next;
33 current.next = prev;
34 prev = current;
35 current = nextTemp;
36 }
37 return prev;
38 }