给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:输入:x = -123
输出:-321
示例 3:输入:x = 120
输出:21
示例 4:输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
因为想用直接遍历的方式,所以用到了链表的结构:
class Node{
public
Node next;
int value;
public Node(){};
}
class Solution {
public int reverse(int x) {
int Total=0;int flat=1;
if(x==0||x==-2147483648)
return 0;
Node node=new Node();
Node point=node;
if(x<0) {
node.value = 11;
x=-x;
}
int Number=0; //表示几位数
while(x!=0){
int temp=x%10;
Node nodeT=new Node();
nodeT.value=temp;
point.next=nodeT;
point=point.next;
x/=10;
Number++;
}
int MultiTen=1;
while(Number!=1){
MultiTen*=10;
Number--;
}
point=node;
if(point.value==11){
flat=0;//表示负数
point=point.next;
}else{
point=point.next;
}
int MM=MultiTen;
while(point!=null){
if(MultiTen==1000000000 && point.value>2 ||(MM==1000000000 && MultiTen==10 &&point.value>4) )
return 0;
Total+=MultiTen*point.value;
MultiTen/=10;
point=point.next;
}
if(flat==0){
Total=-Total;
}
return Total;
}
}
结果:
同样可以用栈来表示,为了应对溢出,
思考的过程真的很重要