题目链接
题目描述
给定两个单向链表,从左到右代表数字从低位到高位,求解两个链表代表的数字之和并且返回一个链表
题目思路
1. 同相双指针
这道题目属于比较常见的同相双指针问题,大致思路是设置两个指针同时从头每次移动一步,每次移动计算一下当前位和。我们设置一个flag变量来记录每一次位计算时是否有进位问题。
当某一个链表走完后,再将剩下还没走完的链表的信息诸位保存并返回。
代码如下:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode res = new ListNode();
ListNode head = res;
int flag = 0;
while(l1!=null && l2!=null) {
ListNode n = new ListNode((l1.val + l2.val + flag)%10);
flag = (l1.val + l2.val + flag)/10;
head.next = n;
head = head.next;
l1 = l1.next;
l2 = l2.next;
}
while(l1!=null) {
ListNode n = new ListNode((flag + l1.val)%10);
flag = (flag + l1.val)/10;
head.next = n;
head = head.next;
l1 = l1.next;
}
while(l2!=null) {
ListNode n = new ListNode((flag + l2.val)%10);
flag = (flag + l2.val)/10;
head.next = n;
head = head.next;
l2 = l2.next;
}
if (flag == 1) {
ListNode n = new ListNode(flag);
head.next = n;
}
return res.next;
}
}
时间复杂度:,空间复杂度:。