题目
给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。
请你返回该链表所表示数字的 十进制值 。
示例 1:
输入:head = [1,0,1]
输出:5
解释:二进制数 (101) 转化为十进制数 (5)
分析
这道题目就遍历链表就可以实现,先确定每一位的位数,然后分别计算每一位二进制对应的十进制数累加即可
java
public class LinkNode {
int val;
LinkNode next;
public LinkNode(int data) {
this.val = data;
this.next = null;
}
}
public class LinkList {
LinkNode head;
public LinkList() {
this.head = null;
}
public LinkNode getHead() {
return this.head;
}
//添加元素
public void addNode(int data) {
LinkNode node = new LinkNode(data);
if (this.head == null) {
this.head = node;
} else {
LinkNode cur = this.head;
while(cur.next != null) {
cur = cur.next;
}
cur.next = node;
}
}
//正序打印
public void print(LinkNode node) {
while(node != null) {
System.out.print(node.val);
System.out.print(" ");
node = node.next;
}
System.out.println();
}
public int getData() {
LinkNode pNode = this.head;
int cnt = 0;
while(pNode != null) {
cnt++;
pNode = pNode.next;
}
int res = 0;
pNode = this.head;
while(pNode != null) {
int tmp = cnt-1;
int data = 1;
while(tmp > 0) {
data = data * 2;
tmp--;
}
res = res + pNode.val * data;
pNode = pNode.next;
cnt--;
}
System.out.println(res);
return res;
}
}
public class convertBinaryNumberinaLinkedListtoInteger {
public static void main(String[] args) {
LinkList list = new LinkList();
list.addNode(1);
list.addNode(0);
list.addNode(1);
list.getData();
}
}