文章目录
- 题目
- 题目决议
- 解题思维1
- 代码如下:
- 代码细节
- 解题思维二
- 代码如下
题目
?
题目决议
一般人可能首先就是将链表逆序,然后,创建一个整形变量 result 来记录 转换成十进制数的结果,再去遍历链表,每拿到一个节点的val值,就拿着val去乘以对应的 2^n 的阶乘(n 从 0 开始,刚好就对应着 最低位 n 次幂的值) ,将每个节点的转化成十进制数的结果,累加到result,最后回传 result,
?
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
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;
}
}
代码细节
?
解题思维二
不采用逆序的方法,并且一次遍历完成这个题目
这个解题思路,说不清,来看下面的举例:
?
代码如下
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
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 评论