给单链表加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

猜你喜欢

转载自www.cnblogs.com/wuyouwei/p/11817176.html