题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
1、反转俩个链表
2、判断俩个链表分别为null的情况
3、计算俩个链表正常存在的情况
4、用flag记录进位的数字,由于是加法,所以最多也是进位1;
5、x.next = temp;把算出来的当前位数链接到链表上
6、x = x.next;每个循环最后进行进位
7、循环完后,如果还有最后的进位越需要链接上
8、反转链表,即可得到结果
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ public ListNode addInList (ListNode head1, ListNode head2) { // write code here ListNode p = reverse(head1); ListNode q = reverse(head2); ListNode result = new ListNode(-1); ListNode x = result; // 是否进位多出 int flag = 0; while (p != null || q != null) { if (p == null) { ListNode temp = null; if (q.val + flag >= 10) { temp = new ListNode((q.val + flag) % 10); flag = 1; } else { temp = new ListNode(q.val + flag); flag = 0; } x.next = temp; } else if (q == null) { ListNode temp = null; if (p.val + flag >= 10) { temp = new ListNode((p.val + flag) % 10); flag = 1; } else { temp = new ListNode(p.val + flag); flag = 0; } x.next = temp; } else if (q != null && p != null) { ListNode temp = null; if (p.val + q.val + flag >= 10) { temp = new ListNode((p.val + q.val + flag) % 10); flag = 1; } else { temp = new ListNode(p.val + q.val + flag); flag = 0; } x.next = temp; } if (p != null) { p = p.next; } if (q != null) { q = q.next; } // 下一位 x = x.next; } // 把最后进位多出的给接上 if (flag == 1) { ListNode t = new ListNode(1); x.next = t; } // 反转链表,得到结果 return reverse(result.next); } // 反转链表 (基础) public ListNode reverse(ListNode head) { ListNode pre = null; ListNode cur = head; while (cur != null) { ListNode temp = cur.next; cur.next = pre; pre = cur; cur = temp; } return pre; } }#链表相加#