- 题目
- 题目解析
- 解题思维1
- 代码如下:
- 代码细节
- 解题思维二
- 代码如下
题目解析
链表头节点的val值是二进制的最高位,依次递减。
根据链表所有节点val值,所构成的二进制数,转换成 十进制数。
解题思维1
一般人可能首先就是将链表逆序。然后,创建一个整形变量 result 来记录 转换成十进制数的结果,再去遍历链表,每拿到一个节点的val值,就拿着val去乘以对应的 2^n 的阶乘(n 从 0 开始,刚好就对应着 最低位 n 次幂的值) 。将每个节点的转化成十进制数的结果,累加到result。最后返回 result。
代码如下:
class Solution { public int getDecimalValue(ListNode head) { if(head == null){ return 0; } ListNode prev = head;//前驱节点 ListNode cur = head.next;// 逆序节点 while(cur!=null){// 遍历链表,将其逆序。 ListNode curNext = cur.next; cur.next = prev; if(prev == head){ prev.next = null; } prev = cur; cur = curNext; } head = prev;// 让 head 永远指向头节点 ListNode tmp = head; int result = 0;// 最终转换成十进制数的结果 int n = 0;// n 次幂,从0开始,让其与遍历节点同步 while(tmp != null){// 将每个节点的转化成十进制数的结果,累加到result。 result += tmp.val * Math.pow(2,n); tmp = tmp.next; n++;// 注意与遍历节点,保持同步。 } return result; } }代码细节
解题思维二
代码如下
class Solution { public int getDecimalValue(ListNode head) { ListNode cur = head; int result = 0; while(cur!= null){ result = result*2 + cur.val; cur = cur.next; } return result; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)