牛客網_剣指offerチェーンテーブルを反転_c++
タイトルの説明
チェーンテーブルを入力し、チェーンテーブルを反転した後、新しいチェーンテーブルのヘッダを出力します.
問題を解く構想.
2つのListNodeのポインタ、firstとsecondを設定し、遍歴しながらsecond->nextの値がfirstになるようにし、処理下の境界状況に注意すればよい.具体的なコードは以下の通りである.
チェーンテーブルを入力し、チェーンテーブルを反転した後、新しいチェーンテーブルのヘッダを出力します.
問題を解く構想.
2つのListNodeのポインタ、firstとsecondを設定し、遍歴しながらsecond->nextの値がfirstになるようにし、処理下の境界状況に注意すればよい.具体的なコードは以下の通りである.
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution
{
public:
ListNode* ReverseList(ListNode* pHead)
{
int len = getLen(pHead);
if (len == 0) return nullptr;
if (len == 1) return pHead;
else
{
ListNode* first = nullptr;
ListNode* second = pHead;
ListNode* tmp = nullptr;
for (int i = 0; i < len; i++)
{
tmp = second->next;
second->next = first;
first = second;
if (tmp) second = tmp;
}
return second;
}
}
int getLen(ListNode* ptr)
{
int res = 0;
while(ptr)
{
res++;
ptr = ptr->next;
}
return res;
}
};