题解 | #给单链表加一#

给单链表加一

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

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode plusOne (ListNode head) {
        // write code here
        // 反转链表,这样就可以从尾部开始相加,得到新的链表,然后在反转回去
        ListNode reNode =  resever(head);
        ListNode root = reNode;
        ListNode tail = null;

        Integer last = null;
        while (reNode != null) {
            int sum = ((last == null) ? 1 : last) + reNode.val;
            int val  = sum % 10;
            last  = sum / 10;
            reNode.val = val;

            tail = reNode;
            reNode = reNode.next;
        }

        if (last != 0) {
            ListNode newNode = new ListNode(last);
            tail.next = newNode;
        }

        return resever(root);
    }

    private ListNode resever(ListNode head) {
        ListNode cur = head;
        ListNode pre = null;
        ListNode next = null;

        while (head != null) {
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }

        return pre;
    }
}

全部评论

相关推荐

我就是0offer糕手:北大不乱杀
点赞 评论 收藏
分享
04-02 16:49
门头沟学院 Java
_bloodstream_:我也面了科大讯飞,主管面的时候听说急招人优先考虑能尽快实习的,我说忙毕设,后面就一直没消息了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务