一级标题:LeetCode算法练习之两个链表相加
LeetCode测试连接:https://leetcode.cn/problems/add-two-numbers/
public class Test03_AddTwoNumbers {
// 不要提交这个类
public static class ListNode {
public int val;
public ListNode next;
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
public static ListNode addTwoNumbers(ListNode head1,ListNode head2){
int len1=listLength(head1);//调用查询链表长度方法得到长度
int len2=listLength(head2);
ListNode l=len1>=len2?head1:head2;//比较链表 长的链表的头作为最终的头
ListNode s=l==head1?head2:head1;
ListNode curL=l;
ListNode curS=s;
ListNode last=curL;
int num=0;//1进位,0无进位
int cur=0;//接受运算结果
while(curS!=null){//短链不为空
cur=curL.val+curS.val+num;
curL.val=cur%10;
num=cur/10;
last=curL;
curL=curL.next;
curS=curS.next;
}
while (curL!=null){
cur=curL.val+num;
curL.val=(cur%10);
num=cur/10;
last=curL;
curL=curL.next;
}
if (num!= 0) {
last.next = new ListNode(1);//最终进位 new一个元素为1让last指向他
}
return l;
}
public static int listLength(ListNode head){
int len=0;
while (head!=null){
len++;
head=head.next;
}
return len;
}
}