加一链表

描述

给定一个非负整数,这个整数表示为一个非空的单链表,每个节点表示这个整数的一位。返回这个整数加一。

除了0本身,所有数字在最高位前都没有0。

列表的头节点存的是这个整数的最高位。

 

思路:可以参考加一数组来实现

    public ListNode PlusOne2(ListNode node)
    {
        ListNode current = node;
        List<int> map = new List<int>();
        while (current.next != null)
        {
            map.Add(current.val);
            current = current.next;
        }
        map.Add(current.val);
        if (current.val < 9)
        {
            //最后一个节点的值小于9说明不需要进位,直接加1后返回原节点即可
            current.val += 1;     
            return node;
        }

        //进1的标志位
        int flag = 1;
        for (int i = map.Count - 1; i >= 0 && flag > 0; i--)
        {
            int temp = map[i] + flag;
            map[i] = temp%10;
            flag = temp/10;
        }

        if (flag == 0)
        {
            //原节点数量没有增加,即节点的值不是都为9
            ListNode res=new ListNode(map[0]);
            ListNode temp = res;
            for (int i = 1; i < map.Count; i++)
            {
                temp.next=new ListNode(map[i]);
                temp = temp.next;
            }
            return res;
        }
        else
        {
            //所有节点值全为9 的情况
            ListNode res = new ListNode(1);
            ListNode temp = res;
            for (int i = 0; i < map.Count; i++)
            {
                temp.next = new ListNode(map[i]);
                temp = temp.next;
            }
            return res;
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值