import java.util.List; public class Sum { public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = null, tail = null; int carry = 0; while (l1 != null || l2 != null) { //n1 n2 是头结点的值 int n1 = l1 != null ? l1.val : 0; int n2 = l2 != null ? l2.val : 0; int sum = n1 + n2 + carry; //确定该位的数值 if (head == null) { head = tail = new ListNode(sum % 10); } else { tail.next = new ListNode(sum % 10); tail = tail.next; } //求商 用来当进位数值 carry = sum / 10; //尾结点指向后一位 if (l1 != null) { l1 = l1.next; } if (l2 != null) { l2 = l2.next; } } if (carry > 0) { tail.next = new ListNode(carry); } return head; } public static void main(String[] args) { // 创建第一个链表 //数组a用来存数 int []a=new int[]{1,8,7,5}; //将第一个数赋予l1的头结点 ListNode l1 = new ListNode(a[0]); // p指针从链表的第一个节点一直往下走(直至最后一个节点) ListNode p = l1; for(int i=1;i<a.length;i++){ p.next = new ListNode(a[i]); p = p.next; } // 创建第二个链表 int []a2=new int[]{1,8,7,5}; ListNode l2 = new ListNode(a2[0]); ListNode q = l2; for(int i=1;i<a2.length;i++){ q.next = new ListNode(a2[i]); q = q.next; } //得到返回列表 ListNode re =addTwoNumbers(l1,l2); //当返回列表不为空时,就打印 while(re != null) { System.out.print(re.val+" "); re = re.next; } } //单向链表的元素定义。 static class ListNode{ //元素数值 int val; //下一个元素 ListNode next; //构造链表 ListNode(int data){ this.val = data; } } }
LeetCode第二题:两数相加的全过程
最新推荐文章于 2024-05-31 10:46:10 发布