我正在尝试交换链接列表中的2个相邻节点(在这种情况下为75和9),每次运行代码时,请使用75-> 9-> 767-的链表进行交换; 2 ...,我得到的整个列表只是转向75-> 9-> 75-> 9-> 75-> 9等。我必须更新指针
答案 0 :(得分:2)
你的问题在于
nextPtr->next = tempPtr;
nextPtr = tempPtr;
我不确定,但我认为你只想输入
nextPtr = tempPtr;
代替。
答案 1 :(得分:1)
提示:如果你想在一个链表中交换节点H(你正在调用hdList)和N(nextPtr)你必须做出任何指向H的点,现在指向N.你没有跟踪任何东西完全指向H.
也就是说,假设您知道列表的一部分是
... P -> H -> N -> Q ...
并且您想要交换H和N.交换后列表的状态应为
... P -> N -> H -> Q ...
正确?但你不能这样做,因为你不知道过去指向H(即P)的东西,所以你可以指向N.
我认为你将不得不回到这个的绘图板上。
答案 2 :(得分:1)
如果要在链表中交换2个节点,为什么要尝试交换指针?只需用简单的交换逻辑交换其中的数据即可。让指针保持原样。如果这不是您想要的,请详细告诉我您希望它到底是什么。
答案 3 :(得分:1)
我猜你正在寻找成对交换,使用它也是如此。如果一切顺利,请告诉我。 对于75-> 9-> 767-> 2,它产生9-> 75-> 2-> 762 ......如果你想要不同但相似的东西,你可以使用它并相应地做出改变。 void swap(struct node ** head) { if(* head == NULL ||(* head) - > next == NULL) 返回;
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;
}
}