拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 LeetCode - 1290 -二进制链表转自变量 - java - 两种思维 - 两种解法 - 细喔

LeetCode - 1290 -二进制链表转自变量 - java - 两种思维 - 两种解法 - 细喔

白鹭 - 2022-02-02 2162 0 0

文章目录

  • 题目
  • 题目决议
  • 解题思维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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *