使用单遍历计算链表中的二进制等价?

时间:2016-09-09 22:51:19

标签: c linked-list

链表的每个节点中的数据包含1/0,单遍历必须计算十进制等值

使用递归和非递归优选C?

NODE *decimalData(NODE *head)
{
  int sum=0;
  if(head->next==0)
   {
             if(head->data==0) return 0;
                else return 1;
     }
   sum=decimalData(head->next);
   return 2*sum;
}

1 个答案:

答案 0 :(得分:0)

您没有说明在head->next找到的数据位是否比当前head->data更重要或更不重要。如果它更重要,那么问题就会有所简化:

unsigned decimalData(NODE *head)
{
    unsigned sum = head->data;

    if (head->next != NULL)
    {
             sum += (decimalData(head->next) << 1);
    }

    return sum;
}