反转链表时出现no viable overloaded '='错误,求原因解析
反转链表代码中的赋值错误分析与修复
错误根源在变量声明行:
ListNode* current,prev,next;
在C++语法中,*仅绑定到紧跟的变量current,因此prev和next被声明为ListNode类型的普通对象,而非指针。但current->next返回的是ListNode*指针类型,将指针赋值给普通对象时,编译器找不到匹配的赋值运算符,于是抛出no viable overloaded '='错误。
修正后的代码
只需将prev和next也声明为指针即可,同时推荐用C++标准的nullptr替代NULL,类型安全性更高:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *current, *prev, *next; prev = nullptr; current = head; while(current != nullptr){ next = current->next; current->next = prev; prev = current; current = next; } head = prev; return head; } };
内容的提问来源于stack exchange,提问作者Gourav kr Singh
相关产品推荐
相关产品推荐

