【发布时间】:2012-07-28 16:55:44
【问题描述】:
copyRev
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 过程之后才出现的。
我已经尝试过就地反转并且它有效。我需要克隆链表的反向。欢迎使用迭代和递归解决方案。另外请指出上述代码中的错误。
这是我自己的练习题,不是作业题
【问题讨论】:
-
尝试向我们展示
append函数。 -
学习使用 Stack 交换网站使用的标记。
-
谢谢。会学到的。
-
您是否想过将列表节点包装到符合 STL 的迭代器(例如使用
boost::iterator),然后让 STL 算法完成这项工作? -
@PaulMichalik:你能提供一些链接吗?我正在学习所有这些。
标签: c++ linked-list