题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
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 int len1 = 0; int len2 = 0; ListNode cur1 = head1; ListNode cur2= head2; ArrayList<Integer> arr = new ArrayList<Integer>(); while(cur1!=null){ len1++; cur1 = cur1.next; } while(cur2!=null){ len2++; cur2 = cur2.next; } //让cur1是较长的那一个 if(len1>=len2){ cur1 = head1; cur2 = head2; }else{ int temp = len1; len1 = len2; len2 = temp; cur1 = head2; cur2 = head1; } int n = 0; while(n<len1-len2){ n++; arr.add(cur1.val); cur1 = cur1.next; } while(cur1!=null && cur2!=null){ arr.add(cur1.val+cur2.val); cur1 = cur1.next; cur2 = cur2.next; } //cnt为0,说明不用进位,如果为1,说明需要进位 int cnt = 0; for(int i=arr.size()-1;i>=0;i--){ if(cnt==1){ arr.set(i,arr.get(i)+1); cnt = 0; } if(arr.get(i)>=10){ cnt = 1; arr.set(i,arr.get(i)-10); } } ListNode dummyNode = new ListNode(0); ListNode cur = dummyNode; for(int i=0;i<arr.size();i++){ ListNode temp = new ListNode(arr.get(i)); cur.next = temp; cur = cur.next; } if(cnt==1){ ListNode temp = new ListNode(1); ListNode c = dummyNode.next; dummyNode.next = temp; temp.next = c; } return dummyNode.next; } }