Reverse a LinkedList
Reverse a LinkedList
本文关键字:LinkedList Reverse 更新时间:2023-10-16
我试图反转一个链表,并将其保存到另一个新的点赞列表中,然后删除旧列表,但在编译时出错。。函数如下。。
LinkedList LinkedList::reverse(){
LinkedList L2;
Node * temp=head;
while(temp->next!=NULL){
Node * del=NULL;
L2.addAtFront(temp->data);
del=temp;
temp=temp->next;
delete del;
}
return L2;
}
如果(且仅当)不再需要原始链表,请使用此选项
与其使用成本较低的addAtFront
(因为您需要为新节点分配内存并销毁旧节点),您可以重用节点和LinkedList
(毕竟,您要删除原始节点,只需设置指针:
LinkedList LinkedList::reverse(){
Node* na = head;
Node* nb = NULL;
Node* nc = NULL;
if(na == NULL) {
return this;
}
nb = na->next;
na->next = NULL;
while(nb != NULL){
nc = nb->next;
nb->next = na;
na = nb;
nb = nc;
}
tail = head; //if you keep a tail?
head = na;
return this;
}
该方法的工作原理如下,扫描原始列表并使用三个引用:na
、nb
和nc
。按原始列表的顺序排列。
现在您可以确定na
和nb
在while
循环中是有效的。您首先通过将nb
的next存储在nc
中来确保保留对它的引用。接下来,将nb
的->next
设置为na
(最初的na->next
是nb
),因此现在它被反转。
然后你在这个过程中转换:na
变成了旧的nb
,nb
变成了老的nc
。您将不断重复此操作,直到到达链接列表的末尾。
您需要执行两项附加任务:-将原始head
的->next
设置为null
,否则将构造一个循环;和-将原始LinkedList
的尾部设置为head
。
如果保持tail
,则首先需要将其设置为头部。
相关文章:
- 错误:未在此范围内声明'reverse'
- C++:正在检查LinkedList中的回文-递归方法-错误
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 在c++中实现LinkedList时,应出现未处理的错误
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 已修改的LinkedList未在文本文件本身中更新
- 如何在 c++ 中处理 LinkedList 的指针
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- 使用to_string、reverse、stoi组合的C++反转编号给出运行时错误实例超出范围
- "How to make a recursive call for palindrom numbers without reverse function in c++?"
- 在 FreeRTOS 中使用 LinkedList 无法保存值
- 为什么像C++和Java这样的语言有一个内置的LinkedList数据结构
- 将对象添加到LinkedList C 中
- 使用简单的代码从分类的LinkedList中删除重复的节点
- C++中嵌套在另一个 LinkedList 中的 LinkedList 整数上的回调函数问题
- LinkedList实现C 错误指针间接
- 将链接列表复制到linkedlist的引用
- LinkedList removePosition 删除错误的元素
- 在多线程中使用LinkedList队列
- Reverse a LinkedList