题解 | #链表相加(二)#

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    public ListNode addInList (ListNode head1, ListNode head2) {
        if(head1 == null || head2 == null){
            return head1 == null ? head2 : head1;
        }

        //两个都不为空,先反转,再相加,最后再反转回来
        ListNode revert1 = revert(head1);
        ListNode revert2 = revert(head2);

        int carry = 0;
        ListNode dummy = new ListNode(-1), cur = dummy;
        while(revert1 != null || revert2 != null){
            int val = (revert1 != null ? revert1.val : 0) + (revert2 != null ? revert2.val : 0) + carry;
            cur.next = new ListNode(val % 10);
            cur = cur.next;
            carry = val / 10;

            if(revert1 != null){
                revert1 = revert1.next;
            }
            if(revert2 != null){
                revert2 = revert2.next;
            }
        }

        //这个点要注意:如果最后了还有个进位1,一定也要拼上
        if(carry == 1){
            cur.next = new ListNode(1);
        }

        return revert(dummy.next);
    }

    private static ListNode revert(ListNode head){
        ListNode pre = null, cur = head;
        while(cur != null){
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }

        return pre;
    }
}

#学习##刷题##每日刷题#
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务