回文数的意思是正着读和倒着读都是一样的,负数和10的倍数肯定不是回文数,顺着这个思路可以先将数进行反转如果是三位数字就将百位和各位进行交换,输入一个数,然后创建一个变量保存该输入值,一个反转后的结果逐位取余。输入的变量对10取整去掉末尾的数字。反转后的结果如果等于原来的输入值的话就认为它是一个回文数。
function huiwenNumber(x) {
// 负数和对10取余等于零的数肯定不是回文数
if(x < 0 || (x % 10 === 0 && x !== 0)) return false;
let res = 0,tempX = x;
while(tempX) {
res = res * 10 + tempX % 10;
tempX = Math.floor(tempX / 10);
}
return res === x;
}
反转链表:
链表的常用操作就是创建一个哑结点做中间结果的存储,例如有一个链表 1->2->3->4->5->null
反转之后的应该是: 5 -> 4 -> 3 -> 2 -> 1 -> null
首先想到是遍历这个链表,将每个链表上的节点存到一个栈中,然后在依次弹出,弹出一个然后追加到哑结点的后面,直到栈空了之后设置弹出的节点的next指针为null
// 反转链表
function reverseList(head) {
let root = head;
let stack = [];
while(root) {
stack.push(root);
root = root.next;
}
// 哨兵节点
let tempRoot = new ListNode(0);
let h = tempRoot;
while(stack.length > 0) {
const node = stack.pop();
// 这里一定需要判断下栈中的长度是几如果是0就可以将当前弹出的节点的next设置为null
if(stack.length === 0) {
node.next = null;
}
h.next = node;
h = h.next;
}
return tempRoot.next;
}