我正在尝试交换链表的相邻节点,即
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/