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

链表相加(二)

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

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 reverse1 = reverse(head1);
        ListNode reverse2 = reverse(head2);
	    // 相加链表
        ListNode pre = null;
	  // 进位的值
        int carry = 0;
        while (reverse1 != null && reverse2 != null) {
            int val1 = reverse1.val;
            int val2 = reverse2.val;
		  // 链表相加的值
            int total = val1 + val2 + carry;
            int rel = total % 10;
            carry = total > 9 ? 1 : 0;
            ListNode temp = new ListNode(rel);
            temp.next = pre;
            pre = temp;
		  // 链表遍历完毕,终止循环
            if (reverse1.next == null && reverse2.next == null) {
                break;
            } else {
			  // 当2个链表长度不一时,一个链表遍历完成后,向其尾部添加一个值为0的节点,直到和另外一个链表长度相同
                if (reverse1.next == null) {
                    ListNode temp1 = new ListNode(0);
                    reverse1.next = temp1;
                }
                if (reverse2.next == null) {
                    ListNode temp1 = new ListNode(0);
                    reverse2.next = temp1;
                }
            }
            reverse1 = reverse1.next;
            reverse2 = reverse2.next;
        }
	  // 链表遍历相加完成后,如果最后还有进位,则继续添加链表
        if (carry != 0) {
            ListNode temp = new ListNode(carry);
            temp.next = pre;
            pre = temp;
        }
        return pre;
    }

    public ListNode reverse(ListNode listNode) {
        ListNode pre = null;
        while (listNode != null) {
            ListNode next = listNode.next;
            listNode.next = pre;
            pre = listNode;
            listNode = next;
        }
        return pre;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-29 08:32
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务