在链表c ++中交换2个节点

时间:2015-02-26 05:14:03

标签: c++ linked-list

我正在尝试交换链接列表中的2个相邻节点(在这种情况下为75和9),每次运行代码时,请使用75-> 9-> 767-的链表进行交换; 2 ...,我得到的整个列表只是转向75-> 9-> 75-> 9-> 75-> 9等。我必须更新指针

4 个答案:

答案 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;
    }
}