交换链表c ++中的2个节点
swapping 2 nodes in a linked list c++
我正在尝试交换链表中的 2 个相邻节点(在本例中为 75 和 9),每次我 运行 代码,比如链表 75->9- >767->2...,我得到整个列表只是转向 75->9->75->9->75->9,等等。我必须更新指针
你的问题出在线条上
nextPtr->next = tempPtr;
nextPtr = tempPtr;
我不确定,但我认为你只是想输入
nextPtr = tempPtr;
相反。
提示:如果你想交换链接列表中的节点 H(你称之为 hdList)和 N(nextPtr),你必须使指向 H 的任何点现在指向 N。你没有跟踪任何指向 H 的东西。
也就是说,假设您知道列表的一部分是
... P -> H -> N -> Q ...
并且你想交换H和N。交换后列表的状态应该是
... P -> N -> H -> Q ...
对吧?但是你不能这样做,因为你不知道用来指向 H(即 P)的是什么,所以你可以让它指向 N。
我想你将不得不重新开始设计这个。
如果你想交换链表中的2个节点,你为什么要交换指针和所有节点?只需使用简单的交换逻辑交换其中的数据即可。让指针保持原样。如果这不是你想要的,请详细告诉我你到底想要它是什么。
我猜你正在寻找成对交换,同样使用它。如果一切顺利,请告诉我。
对于 75->9->767->2 它产生 9->75->2->762... 如果你想要不同但相似的东西,你可以使用它并进行相应的更改。
无效交换(结构节点**头)
{
如果 (*head == NULL || (*head)->next == NULL)
return;
struct node *prev = *head;
struct node *cur = (*head)->next;
*head = cur;
while (true)
{
struct node *next = cur->next;
cur->next = prev;
if (next == NULL || next->next == NULL)
{
prev->next = next;
break;
}
prev->next = next->next;
prev = next;
cur = prev->next;
}
}
我正在尝试交换链表中的 2 个相邻节点(在本例中为 75 和 9),每次我 运行 代码,比如链表 75->9- >767->2...,我得到整个列表只是转向 75->9->75->9->75->9,等等。我必须更新指针
你的问题出在线条上
nextPtr->next = tempPtr;
nextPtr = tempPtr;
我不确定,但我认为你只是想输入
nextPtr = tempPtr;
相反。
提示:如果你想交换链接列表中的节点 H(你称之为 hdList)和 N(nextPtr),你必须使指向 H 的任何点现在指向 N。你没有跟踪任何指向 H 的东西。
也就是说,假设您知道列表的一部分是
... P -> H -> N -> Q ...
并且你想交换H和N。交换后列表的状态应该是
... P -> N -> H -> Q ...
对吧?但是你不能这样做,因为你不知道用来指向 H(即 P)的是什么,所以你可以让它指向 N。
我想你将不得不重新开始设计这个。
如果你想交换链表中的2个节点,你为什么要交换指针和所有节点?只需使用简单的交换逻辑交换其中的数据即可。让指针保持原样。如果这不是你想要的,请详细告诉我你到底想要它是什么。
我猜你正在寻找成对交换,同样使用它。如果一切顺利,请告诉我。 对于 75->9->767->2 它产生 9->75->2->762... 如果你想要不同但相似的东西,你可以使用它并进行相应的更改。 无效交换(结构节点**头) { 如果 (*head == NULL || (*head)->next == NULL) return;
struct node *prev = *head;
struct node *cur = (*head)->next;
*head = cur;
while (true)
{
struct node *next = cur->next;
cur->next = prev;
if (next == NULL || next->next == NULL)
{
prev->next = next;
break;
}
prev->next = next->next;
prev = next;
cur = prev->next;
}
}