c++ - 仅通过操作指针交换链表中的相邻节点

标签 c++ linked-list swap

我正在尝试交换链表的相邻节点,即

1->2->3->4->5 变成 2->1->4->3->5

我的职能是:

node * swapper(node * &head)
{
    if (head == NULL || head->next == NULL) return head;

    node * t = head;
    head= head->next;
    head->next = t;
    t->next = head->next;

    node *previous = head->next->next, *current = previous->next;

    while (current!=NULL&&previous!=NULL)
    {
        node * t1 = current,*t2=previous;
        current->next = previous;
        previous->next = t1->next;
        previous = t1->next;
        current = previous->next;
    }

    return head;
}

我知道这可以通过交换值来完成,但我必须在常量空间中完成并且不交换值。

我找不到为什么我的功能不起作用。

最佳答案

我注意到的第一件事是您需要交换这两行:

head->next = t;
t->next = head->next;

因为你说的是​​ head->next = t 所以你失去了与链表其余部分的连接。

此外,在循环内部。有几个错误: 1-您在获取当前的下一个之前更改了当前的下一个,这意味着您正在丢失链接(如上) 2- 您没有将它们连接到它们之前的节点。

关于c++ - 仅通过操作指针交换链表中的相邻节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31337525/

相关文章:

c++ - 如何理解 "Pass By Reference Within a Function"w3schools示例?

c - C函数在char [] segfaults中交换两个char,尽管不使用字符串文字

windows - 在c/c++中使用检查函数编译Windows NT命令行代码循环

c++ - 必须在 C++ 中将 c_str 用于 strchr?

c++ - 递归函数,将链表的末尾附加到另一个链表的开头,并返回指向新列表开头的指针

java - java通用对象反序列化和序列化

c - 如何引用另一个 C 文件中的变量?

c++ - 排序不正确

c# - 将 char*[] 从 c++ dll 结构传递到 c#

带指针的 C 函数在一台计算机上工作,在另一台计算机上不起作用