给单链表加一

思路:

1.先建立一个虚的头结点,将头结点连接到原链表的头结点

2.注意头结点的值要初始化为0!!!

3.由于需要判断当前的节点的值是否需要加1,就需要知道后面的节点的值是否会产生进位

4.所以用递归的思想,先得到后面的节点的值

5.分为两种情况:如果后面没有节点,就表明该链表只有一个节点,所以将该节点的值加1就直接可以返回了

6.否则就将通过递归返回返回下一个节点的值,进行判断,如果下一个节点的值等于10,就将现在的节点的值加1,将后面的这个节点的值改为0

7.最后判断一下是否会产生一个最高位,如果虚节点的值不为0,就返回虚节点的值,否则就返回原先的链表的头结点

代码:

import java.util.*;

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

public class Solution {
    public ListNode Plusnode(ListNode head){
        //特殊情况判断:如果发现当前节点的后面并不存在节点
        //那么就表明当前的节点就是链表(由于该链表只有一位)的最后一位,将该位加1即可,就可以结束了
        if(head.next==null){
            head.val+=1;
            return head;
        }
        //否则就需要通过递归先得到后面的那个节点
        ListNode next= Plusnode(head.next);
        //进行判断后面的节点的值是否会产生进位
        //如果之前的这个节点会产生进位,就将前面的这一位的值变为0
        //将当前节点的值加1
        if(next.val==10){
            next.val=0;
            head.val+=1;
        }
        return head;

    }
    public ListNode plusOne (ListNode head) {
        //创建一个虚的头结点,将虚的头结点连接在原链表的头结点:注意一定要初始化为0!!!
        //因为到时候可能会有进位
        ListNode newhead=new ListNode(0);
        newhead.next=head;
        //因为想要判断当前节点的值是否需要加一,需要先得到之前的一个节点的值是否会产生进位
        Plusnode(newhead);
        //判断一下如果虚的头结点的值不是0,就返回虚节点,否则就表示加1后不会使得数增加一位
        return newhead.val==0?head:newhead;
    }
}