两个链表相加
给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
思路:
两个链表中,只要任意一个链表还有值,就需要一直求和
如果两个链表等长还好,如果一个长一个短
5 -> 9 -> 1
5
对于这种,短的链表都加完后,可以补0继续与长的链表进行相加。直到长的链表也全加完
public class AddNode {
public static void main(String[] args) {
// 个位排在链表首部
ListNode root1 = new ListNode(7);
ListNode n1 = new ListNode(1);
ListNode n2 = new ListNode(8);
ListNode n9 = new ListNode(9);
root1.next = n1;
n1.next = n2;
n2.next = n9;
ListNode root2 = new ListNode(5);
ListNode n3 = new ListNode(9);
ListNode n4 = new ListNode(2);
root2.next = n3;
n3.next = n4;
ListNode result = addNode(root1, root2);
System.out.println(result);
}
private static ListNode addNode(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode l1Temp = l1;
ListNode l2Temp = l2;
ListNode temp = head;
// 进位
int remainder = 0;
while (l1Temp != null || l2Temp != null){
int x = l1Temp == null ? 0 : l1Temp.val;
int y = l2Temp == null ? 0 : l2Temp.val;
int sum = x + y + remainder;
temp.next = new ListNode(sum % 10);
temp = temp.next;
remainder = sum / 10;
// 如果当前节点已为null,则下一个节点也为null,否则正常 _ = _.next
l1Temp = l1Temp == null ? null : l1Temp.next;
l2Temp = l2Temp == null ? null : l2Temp.next;
}
// 此时,l1和l2均已全部加完。只需要再看一下进位是否还剩个1
if (remainder == 1){
temp.next = new ListNode(1);
}
return head.next;
}
}
756

被折叠的 条评论
为什么被折叠?



