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

import java.util.*;

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

public class Solution {
    /**
     *
     * @param head1 ListNode类
     * @param head2 ListNode类
     * @return ListNode类
     */
    public ListNode revers(ListNode head) {
        ListNode cur = head.next;
        ListNode curNext = cur.next;
        head.next = null;
        while (true) {
            cur.next = head;
            head = cur;
            cur = curNext;
            if (cur == null) {
                break;
            }
            curNext = cur.next;
        }
        return head;
    }
    public ListNode addInList (ListNode head1, ListNode head2) {
        head1 = revers(head1);
        head2 = revers(head2);
        int n = 0;
        ListNode head = null;
        ListNode cur = head;
        while (head1 != null && head2 != null) {
            int val = head1.val + head2.val + n;
            if (val >= 10) {
                n = 1;
                val = val % 10;
            } else {
                n = 0;
            }
            ListNode node = new ListNode(val);
            if (head == null) {
                head = node;
                cur = head;
            } else {
                cur.next = node;
                cur = cur.next;
            }
            head1 = head1.next;
            head2 = head2.next;
        }
        while (head1 != null) {
            int val = head1.val + n;
            if (val >= 10) {
                n = 1;
                val = val % 10;
            } else {
                n = 0;
            }
            ListNode node = new ListNode(val);
            cur.next = node;
            cur = cur.next;
            head1 = head1.next;
        }

        while (head2 != null) {
            int val = head2.val + n;
            if (val >= 10) {
                n = 1;
                val = val % 10;
            } else {
                n = 0;
            }
            ListNode node = new ListNode(val);
            cur.next = node;
            cur = cur.next;
            head2 = head2.next;
        }
        if (n == 1) {
            ListNode node = new ListNode(1);
            cur.next = node;
            cur = cur.next;

        }
        head = revers(head);
        return head;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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