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

链表相加(二)

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

1、反转俩个链表

2、判断俩个链表分别为null的情况

3、计算俩个链表正常存在的情况

4、用flag记录进位的数字,由于是加法,所以最多也是进位1;

5、x.next = temp;把算出来的当前位数链接到链表上

6、x = x.next;每个循环最后进行进位

7、循环完后,如果还有最后的进位越需要链接上

8、反转链表,即可得到结果

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
        ListNode p = reverse(head1);
        ListNode q = reverse(head2);
        ListNode result = new ListNode(-1);
        ListNode x = result;
        // 是否进位多出
        int flag = 0;
        while (p != null || q != null) {
            if (p == null) {
                ListNode temp = null;
                if (q.val + flag >= 10) {
                    temp = new ListNode((q.val + flag) % 10);
                    flag = 1;
                } else {
                    temp = new ListNode(q.val + flag);
                    flag = 0;
                }
                x.next = temp;
            } else if (q == null) {
                ListNode temp = null;
                if (p.val + flag >= 10) {
                    temp = new ListNode((p.val + flag) % 10);
                    flag = 1;
                } else {
                    temp = new ListNode(p.val + flag);
                    flag = 0;
                }
                x.next = temp;
            } else if (q != null && p != null) {
                ListNode temp = null;
                if (p.val + q.val + flag >= 10) {
                    temp = new ListNode((p.val + q.val + flag) % 10);
                    flag = 1;
                } else {
                    temp = new ListNode(p.val + q.val + flag);
                    flag = 0;
                }
                x.next = temp;
            }

            if (p != null) {
                p = p.next;
            }
            if (q != null) {
                q = q.next;
            }
            // 下一位
            x = x.next;
        }
        // 把最后进位多出的给接上
        if (flag == 1) {
            ListNode t = new ListNode(1);
            x.next = t;
        }
        // 反转链表,得到结果
        return reverse(result.next);
    }

  	// 反转链表 (基础)
    public ListNode reverse(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
}

#链表相加#
全部评论

相关推荐

我即大橘:耐泡王
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务