我也开始刷leetcode啦~最近把自己写的一些觉得比较精彩的leetcode代码放上来,会带解释的~都是自己测试在leetcode上面测试过的!
大部分自己也会把测试部分的main函数或class写上,方便大家拷回去自己测试~
本题的关键:
1.两个list可能不一样长
2.两个digit相加如果大于等于10需要进位
3.输出的node要reverse(反向)
import testAndfun.LLCycle.ListNode;
public class addTwoNum {
public staticvoid main(String[]args) {
ListNode l1 = new ListNode(2);
ListNode x2 = new ListNode(4);
ListNode x3 = new ListNode(3);
l1.next = x2;
x2.next = x3;
ListNode l2 = new ListNode(5);
ListNode y2 = new ListNode(6);
ListNode y3 = new ListNode(4);
l2.next = y2;
y2.next = y3;
ListNode ret = addTwoNumbers(l1,l2);
addTwoNum ad = new addTwoNum();
ad.print(ret);
}
//注意main是static,静态函数只能调用静态方法
public void print(ListNoderet) {
while(ret!=null){System.out.print(ret.val);ret=ret.next;}
}
static class ListNode{
int val;
ListNode next;
ListNode(int x){
val =x;
next=null;
}
}
//题目正式开始~~~
public static ListNode addTwoNumbers(ListNodel1, ListNodel2) {
int carry =0;
ListNode newHead = new ListNode(0);
ListNode p1 = l1,p2 =l2, p3=newHead; //这里要有p3用作操作,newHead用于返回
while(p1 !=null ||p2 != null){//每一轮开始对p1,p2进行digit加法,如果超过10了,注意下面让p3.next先new成1
if(p1 !=null){
carry += p1.val;
p1 = p1.next;
}
if(p2 !=null){
carry += p2.val;
p2 = p2.next;
}
p3.next =new ListNode(carry%10);
p3 = p3.next;
carry /= 10;
}
//说明之前超过10了,需要让下一位一上来多“1”
if(carry==1)
p3.next=new ListNode(1);
//注意p3也是从next开始的哦
return newHead.next;
}
}