C++ 链表反转 - 指针不前进
c++ linked list reversal - pointer doesn't advance
我知道以前有人问过关于反向链表的问题,但我想尝试用我自己的实现来解决这个问题。
我的代码对我来说是有意义的,我觉得它应该工作,但是当我运行调试器时,循环无限运行。具体来说,head
和next
在链表的第一个节点和第二个节点之间交替。getLink()
方法返回节点的指针(它指向列表中的下一个节点)。基于我在while循环下的评论的任何输入都会有所帮助。
void revNodes(IntNodePtr& head)
{
IntNodePtr prev = NULL;
IntNodePtr next = NULL;
next = head;
while (next != NULL)
{
prev = head;
// this should advance the pointer head to the next node in the list because next is the same as head initially
head = next->getLink();
// advance the pointer next to node after it
next = next->getLink();
// set the pointer in the node that head is pointing to to prev (head before head was advanced)
head->setLink(prev);
}
}
将next
初始化为head
,然后在循环中将它们设置为指向相同的节点。
实际上,它们都指向列表头部之后的第一个节点,然后将该节点上的指针设置为列表头部的head->setLink(prev)
行。因此,在下一次通过循环时,head
和next
都指向原始头节点!
next = next->getLink();
:
next = head->getLink();
你将能够通过列表,,但,然后你将跳过下一个节点,当你设置head
到next->getLink()
。因此,在开始时,您应该将next
初始化为head->getLink()
,将head
初始化为next
,并将next
初始化为head->getLink()
。
所以把它变成代码:
void revNodes(IntNodePtr& head)
{
IntNodePtr prev = NULL;
IntNodePtr next = NULL;
next = head->getLink();
while (next != NULL)
{
prev = head;
// this should advance the pointer head to the next node in the list
head = next;
// advance the pointer next to node after it
next = next->getLink();
// set the pointer in the node that head is pointing to to prev (head before head was advanced)
head->setLink(prev);
}
}
这个怎么样:
void revNodes(IntNodePtr&head)
{
IntNodePtr prev = NULL;
IntNodePtr next = NULL;
IntNodePtr p = head;
while (p){
next = p->getLink();
p->setLink(prev);
prev = p;
p = next;
}
head = prev;
}
你的算法有两个问题:
-
列表中的head元素将成为反向列表中的最后一个元素,因此您需要将其链接设置为NULL。
-
在循环的第一次迭代中,您将第二项中的链接更改为指向第一个元素,但您没有将
next
指针移动到下一项(在本例中为第三个元素)。
相关文章:
- C++,指针数组,指向双链表中的条目
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 链表指针问题
- 将链表转换为指针数组时出错
- 如何实现容纳整数和无效指针的双向链表?
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- 为什么我在空指针错误(链表)中获取成员访问权限
- 链表删除功能的单指针 // 是可能的
- 如何深度复制链表对象指针
- 链表 - 使用后面的指针在末尾插入
- 链表和指针在C++中的点
- 未分配被释放的指针(将堆栈实现为链表时)
- 使用双指针和递归反转链表
- 使用函数引用指向节点的指针删除链表中的节点?
- 使用 XOR 操作仅使用 2 个指针反转链表
- 如果我们不创建一个新节点并使用指针插入数据并建立链接(在链表中)怎么办?
- 指针永远不会在链表深层复制构造函数中达到 null
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 如何从文件读取到动态分配的指向结构的指针链表中?
- C++指针链表