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

swapping 2 nodes in a linked list c++

本文关键字:2个 节点 中的 c++ 链表 交换      更新时间:2023-10-16

我正在尝试交换链表中的两个相邻节点(在这种情况下是75和9),每次运行代码时,比如说使用75->9->767->2…的链表,我会得到整个列表,只需转到75->9->75->9->75->9,等等。我必须更新指针

您的问题是线路

nextPtr->next = tempPtr;nextPtr = tempPtr;

我不确定,但我想你只是想打

nextPtr = tempPtr;

相反。

我猜您正在寻找成对交换,请使用此选项。如果进展顺利,请告诉我。对于75->9->767->2,它会产生9->75->2->762…如果你想要不同但相似的东西,你可以使用它并进行相应的更改。void swap(结构节点**头){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;
    }
}

提示:如果你想在链表中交换节点H(你称之为hdList)和N(nextTr),你必须让H的任何点现在都指向N。

也就是说,假设你知道你的列表中有一部分是

...   P -> H -> N -> Q ...

并且你想要交换H和N。交换后列表的状态应该是

...  P -> N -> H -> Q ... 

对吧?但你不能这样做,因为你不知道过去是什么指向H(即P),所以你可以让它指向N。

我想你必须重新开始这件事了。

如果您想交换链表中的2个节点,为什么要尝试交换指针和所有节点?只需使用简单的交换逻辑交换其中的数据。让指针保持原样。如果这不是你想要的,请详细告诉我你到底想要它是什么。