C++ 如何在不更改C+中的原始链表的情况下反转链表+;
我试图测试一个链表是否是回文的。为此,我将反转链表,然后在循环中逐个检查每个节点。但是,我不知道如何通过值传递原始链表。我想现在我正在通过引用传递链表,在我反转它之后,它修改了原始结构C++ 如何在不更改C+中的原始链表的情况下反转链表+;,c++,C++,我试图测试一个链表是否是回文的。为此,我将反转链表,然后在循环中逐个检查每个节点。但是,我不知道如何通过值传递原始链表。我想现在我正在通过引用传递链表,在我反转它之后,它修改了原始结构 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(!head) return NULL;
ListNode* current = head;
ListNode* pre = NULL;
ListNode* nextTemp = NULL;
while(current!=NULL) {
nextTemp = current->next;
current->next = pre;
pre = current;
current = nextTemp;
}
head = pre;
return head;
}
bool isPalindrome(ListNode* head) {
ListNode* original = head;
ListNode* reverse = reverseList(head);// is there a way that I can pass it as a copy?
while(original!=NULL){
if(reverse->val == original->val){
reverse=reverse->next;
original=original->next;
}else{
return false;
}
}
return true;
}
};
执行此操作时:
ListNode* original = head;
您只需复制指针,这意味着您有两个指针变量指向相同的内存区域,因此更改一个指针变量将更改另一个指针变量。你能不能不去引用指针并复制它。然后,如果需要,您可以获得指向该新变量的指针
ListNode original = *head;
ListNode* original2 = &original;
然后,您可以在不更改标题的情况下修改原始列表2。与其制作副本,为什么不在最后撤消反向操作?@EvanWeissburg您将把反向列表与。。。什么?如果这是学校作业:你想要一个LinkedList类独立于你的ListNode类之外。您希望LinkedList具有副本构造函数。如果还有其他问题:永远不要使用链表,更不要说你自己的链表。你可以将每个值存储在一个向量中,这样就很容易双向使用(或使用)。这看起来很危险-第一个节点将保持不变,但“反向原始2”将修改其后继元素以位于复制的标头之前,使原始列表成为奇怪的三元素列表,最后一个元素是第一个元素的副本,但对于成员
下一个
。