描述
给定一个非负整数,这个整数表示为一个非空的单链表,每个节点表示这个整数的一位。返回这个整数加一。
除了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;
}
}