gpt4 book ai didi

c++ - 复制链表的反向

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:14 24 4
gpt4 key购买 nike

复制版本

void copyRev(node *head1, node *&head2)
{

stack<int> dat;
node* curr = head1;
while(curr!=NULL){
dat.push(curr->data);
curr = curr->next;
}
while(!dat.empty()){
append(head2,dat.top());
dat.pop();
}

}

附加

void append(node* &head, int data){

if(head==NULL){
head= new node;
head->data = data;
head->next = NULL;
}
else{

node *curr = head;
while((curr)->next!=NULL){
(curr) = (curr)->next;
}
(curr)->next = new node;
(curr) = (curr)->next;
(curr)->data = data;
(curr)->next = NULL;
}
}

好吧,我正在尝试克隆链表的反向。我知道如何就地反转列表。但是这段代码给了我一个Bus error(code dumped)

这就是我在 main() 中调用函数的方式

node *head;

for(int i = 0;i<9;i++){
append(head,i*i);
}
node *revHead;
printList(head);

copyRev(head,revHead);
printList(revHead);

append() 函数中,我检查 NULL 头并在它为 NULL 时创建一个新节点。此外,append 函数正确地将元素添加到列表中。仅在我调用 copyRev 过程后才出现问题。

我已经尝试过就地逆向并且它有效。我需要克隆链表的反向。欢迎使用迭代和递归解决方案。另请指出上述代码中的错误。

这是我自己的练习题,不是作业题

最佳答案

你没有初始化你的指针:

node *head;
node *revHead;

因此它们具有不确定的值(即它们是随机的)。

以任何方式使用这些指针中的值都是未定义的行为。这可能是您的错误。

只需初始化它们:

node*  head     = NULL;
node* revHead = NULL;

链表的递归反转:

void reverse(node*& head)
{
head = reverse(head, NULL);
}
node* reverse(node* item, node* next)
{
if (item == NULL)
{ return next;
}
node* iter = item->next;
item->next = next;
return reverse(iter, item);
}

关于c++ - 复制链表的反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com