• 给单链表加1


    用一个 非空 单链表来表示一个非负整数,然后将这个整数加一。

    你可以假设这个整数除了 0 本身,没有任何前导的 0。

    这个整数的各个数位按照 高位在链表头部、低位在链表尾部 的顺序排列。

    示例:

    输入: [1,2,3]
    输出: [1,2,4]

    解法1:

    public static ListNode plusOne(ListNode head) {
        /*链表翻转*/
        ListNode reverse = reverse(head);
        /*定义一个引用指向翻转后的头*/
        ListNode itr = reverse;
        /*进位*/
        int add = 0;
        /*个位加1的值*/
        int c = 1;
        ListNode last = null;
        while (itr != null) {
          /*相加后的结果*/
          int addResult = itr.val + add + c;
          /*进位重新置为0*/
          add = 0;
          /*个位加了就不加了*/
          c = 0;
          if (addResult == 10) {
            /*当值为10时当前值置为0,进位加1*/
            itr.val = 0;
            add = 1;
          } else {
            /*赋值*/
            itr.val = addResult;
          }
          /*保存最后一个节点*/
          if (itr.next == null) {
            last = itr;
          }
          /*节点向后移动一个*/
          itr = itr.next;
        }
        if (add > 0) {
          /*当进位不为0时,说明要新增个节点*/
          last.next = new ListNode(add);
        }
        /*再次翻转*/
        return reverse(reverse);
      }
    
      public static ListNode reverse(ListNode head) {
        ListNode pre = null;
        while (head != null) {
          ListNode tmp = head.next;
          head.next = pre;
          pre = head;
          head = tmp;
        }
        return pre;
      }
    View Code

    解法2:

    思路:

    用快指针fast,遍历链表
    fast.val != 9,慢指针移动到当前快指针处
    fast.val = 9,慢指针原地不动
    遍历结束,慢指针的值加一,慢指针后续所有节点值设置为0,打完收工!

    public ListNode PlusOne(ListNode head)
            {
                //1.双指针
                ListNode fast = head;
                ListNode slow = new ListNode(0);
                slow.next = head;
    
                //2.遍历链表
                while (fast != null)
                {
                    if (fast.val != 9)
                    {
                        slow = fast;
                    }
                    fast = fast.next;
                }
    
                //3.末位加1
                slow.val += 1;
                ListNode cur = slow.next;
                while (cur != null)
                {
                    cur.val = 0;
                    cur = cur.next;
                }
                return slow.next == head ? slow : head;
            }
    View Code

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/plus-one-linked-list

  • 相关阅读:
    软件需求模式阅读笔记02
    软件需求模式阅读笔记1
    问题账户需求分析
    浅谈软件架构师的工作过程
    架构之美阅读笔记五
    架构之美阅读笔记四
    架构之美阅读笔记三
    架构之美阅读笔记二
    架构之美阅读笔记一
    软件需求与分析课堂讨论一
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/11817176.html
Copyright © 2020-2023  润新知