私は現在、学校の休憩中にポインタを練習しています。下のリンクリストを逆にする方法を書いていますが、オンラインテストに渡すと失敗します。二重リンクリストをテールから頭に逆転させる
Node* Reverse(Node *head)
{
int count = 0;
struct Node *ptr = head;
// return head if NULL
if (head == NULL) {
return head;
}
// if the list is only the head, then the reverse is just the head... so nothing changes
if((head->next == NULL && head->prev == NULL)){
return head;
}
//Come here if previous if statements fail, traverse the list until I reach tail which will become the
// new head
while(ptr->next != NULL){
ptr = ptr->next;
count++;
}
head = ptr; // this is the new head
//starting from tail all the way to head swap the "prev" and "next" of each node
struct Node *temp = ptr->next;
for(int i = 0; i<count; i++){
ptr->next = ptr->prev;
ptr->prev = temp;
ptr=ptr->next;
temp= ptr->next;
//count--;
}
return head;
}
私は私が頭から尾にそれを横断しながら、リストを逆にすることはおそらく賢くあることを認識し、私はそれが退屈だと思ったので、私が代わりに頭に尾から始め、それを逆にすることを決めました。 whileループまたはforループに明らかなエラーがあると思われますが、エラーを診断できません。
オンラインテストにはどのようなエラーがありますか? – nobism
'struct Node' - >' Node'または 'Node * head' - >' struct Node * head' – BLUEPIXY
ここにエラーがあります:間違った答えです! 考えられるエラー: 1.関数からNULL値を返しました。 2.ロジックに問題があります – Belphegor