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”将修改其后继元素以位于复制的标头之前,使原始列表成为奇怪的三元素列表,最后一个元素是第一个元素的副本,但对于成员
下一个