002两数相加

79 阅读1分钟

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1,ListNode l2) {
		/*
		 题目信息:
		 两个非空的链表
		 逆序存储
		 除了数字0不会以0开头
		 */
		/*
		 * 依次相加
		 * 注意考虑进位
		 */
//		创建头结点
		ListNode head=new ListNode();
//		指向head
		ListNode node=head;
//		依次将每个结点相加,记得考虑进位
//		初始化进位为0
		int so=0;
//		遍历两个链表叠加
//		直到两个链表均遍历完
		ListNode p=l1;
		ListNode q=l2;
		while(p!=null||q!=null) {
//			初始化进位、两个对应结点的和为进位大小
			int sum=so;
			if(p!=null) {
				sum+=p.val;
			}
			if(q!=null) {
				sum+=q.val;
			}
//			创建node的下一个结点,大小为sum%10;
			node.next=new ListNode(sum%10);
//			更新进位
			so=sum/10;
			/*
			 * 记得要考虑p、q结点是否为null
			 */
			if(p!=null) {
				p=p.next;
			}
			if(q!=null) {
				q=q.next;
			}
			node=node.next;
		}
//		叠加之后要考虑是否仍存在进位,是否需要创建新结点
		if(so==1) {
			node.next=new ListNode(so);
		}
		return head.next;
	}
}