计算机毕业论文内容参考|基于App的WiFi的网络定时开关的设计与实现
- 我的原始人解法:首先按照现在从前往后的顺序遍历两个链表就是从个位开始相加,正好省的我反转链表,定义一个变量记录是否满十进一,然后根据相加的结果不断创建新结点,并且不断更新头结点,如果最后满十进一变量仍为 true 则再加一位 1(否则 99 + 1 得到 00 了),最后的链表反转即可。
-
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode l = null;
boolean addOne = false;
while(l1!=null || l2!=null){
int val;
if(l1 == null){
val = l2.val;
l2=l2.next;
}else if (l2 == null){
val = l1.val;
l1=l1.next;
}else{
val = l1.val + l2.val;
l1=l1.next;
l2=l2.next;
}
if(addOne) val++;
if(val < 10){
addOne=false;
}else{
val%=10;
addOne=true;
}
ListNode t = new ListNode(val,l);
l = t;
}
if(addOne){
ListNode t = new ListNode(1,l);
l = t;
}
return reverse(l);
}
public ListNode reverse(ListNode l) {
ListNode r = null;
while(l != null){
ListNode t = l.next;
l.next = r;
r=l;
l=t;
}
return r;
}
- 他人解法:既然位数不一定相等,那就补 0 使其相等。(关于返回的结果链表,我是不断 new ListNode 最后反转链表。他人题解是创建两个链表第一个为记录头结点的链表 pre,让第二个链表等于 pre,然后让第二个链表不断往后加结点并遍历到下一结点,最后返回 pre.next 即可。)
-
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(0);
ListNode cur = pre;
int carry = 0;
while(l1 != null || l2 != null) {
int x = l1 == null ? 0 : l1.val;
int y = l2 == null ? 0 : l2.val;
int sum = x + y + carry;
carry = sum / 10;
sum = sum % 10;
cur.next = new ListNode(sum);
cur = cur.next;
if(l1 != null)
l1 = l1.next;
if(l2 != null)
l2 = l2.next;
}
if(carry == 1) {
cur.next = new ListNode(carry);
}
return pre.next;
}