0


二进制链表转整数

给你一个单链表的引用结点

  1. head

。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。

请你返回该链表所表示数字的 十进制值

示例 1:

img

  1. 输入:head = [1,0,1]
  2. 输出:5
  3. 解释:二进制数 (101) 转化为十进制数 (5)

示例 2:

  1. 输入:head = [0]
  2. 输出:0

示例 3:

  1. 输入:head = [1]
  2. 输出:1

示例 4:

  1. 输入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]
  2. 输出:18880

示例 5:

  1. 输入:head = [0,0]
  2. 输出:0

代码如下:

  1. //方法一:
  2. class Solution {
  3. public:
  4. int getDecimalValue(ListNode* head) {
  5. int res=0;
  6. ListNode* curr=head;
  7. ListNode* prev=nullptr;
  8. while(curr!=nullptr)//反转链表
  9. {
  10. ListNode* temp=curr->next;
  11. curr->next=prev;
  12. prev=curr;
  13. curr=temp;
  14. }
  15. int t=1;//2^0=1
  16. curr=prev;//反转之后的链表链表的头部指向prev,此时让prev指向curr,链表头部为curr
  17. while(curr!=nullptr)
  18. {
  19. res+=t*curr->val;
  20. t*=2;//2^0 2^1 2^2每次都是2倍
  21. curr=curr->next;
  22. }
  23. return res;//返回最终结果
  24. }
  25. };
  26. //方法二:
  27. class Solution {
  28. public:
  29. int getDecimalValue(ListNode* head) {
  30. int res=0;//记录最终结果
  31. ListNode* curr=head;
  32. while(curr!=nullptr)
  33. {
  34. res=res*2+curr->val;//就相当于十进制数526=52*10+6,此时是二进制数
  35. curr=curr->next;
  36. }
  37. return res;
  38. }
  39. };

本文转载自: https://blog.csdn.net/m0_62379712/article/details/132086204
版权归原作者 m0_62379712 所有, 如有侵权,请联系我们删除。

“二进制链表转整数”的评论:

还没有评论