This commit is contained in:
2025-07-14 19:23:17 +08:00
parent ec59538a98
commit 72843d1812
3 changed files with 72 additions and 0 deletions

12
include/solution/1290.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef INC_1290_H
#define INC_1290_H
#ifdef __cplusplus
extern "C"
{
#endif
#include <ListNode.h>
int getDecimalValue(struct ListNode *head);
#ifdef __cplusplus
}
#endif
#endif

12
src/1290.c Normal file
View File

@@ -0,0 +1,12 @@
#include <solution/1290.h>
int getDecimalValue(struct ListNode *head)
{
int x = 0;
while (head)
{
x = (x << 1) + head->val;
head = head->next;
}
return x;
}

48
tests/test_1290.cpp Normal file
View File

@@ -0,0 +1,48 @@
#include <gtest/gtest.h>
#include <solution/1290.h>
class GetDecimalValueTest : public ::testing::Test
{
protected:
// 构建链表vector -> ListNode*
ListNode *buildList(const std::vector<int> &values)
{
ListNode dummy{0, nullptr};
ListNode *current = &dummy;
for (int v : values)
{
current->next = new ListNode{v, nullptr};
current = current->next;
}
return dummy.next;
}
// 释放链表
void freeList(ListNode *head)
{
while (head)
{
ListNode *tmp = head;
head = head->next;
delete tmp;
}
}
};
// 示例 1: [1, 0, 1] → 5
TEST_F(GetDecimalValueTest, Binary101)
{
ListNode *head = buildList({1, 0, 1});
int expected = 5;
EXPECT_EQ(getDecimalValue(head), expected);
freeList(head);
}
// 示例 2: [0] → 0
TEST_F(GetDecimalValueTest, Binary0)
{
ListNode *head = buildList({0});
int expected = 0;
EXPECT_EQ(getDecimalValue(head), expected);
freeList(head);
}