【发布时间】:2015-07-10 09:40:13
【问题描述】:
我正在尝试交换链表的相邻节点,即
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;
}
我知道这可以通过交换值来完成,但我必须在常量空间中完成它并且不交换值。
我找不到为什么我的功能不起作用。
【问题讨论】:
-
这不是MCVE,因此其他人更难找出它不起作用的原因。如果您告诉我们它有什么问题,那将是一个好的开始。是否存在编译/运行时错误?它是否运行但没有产生预期的输出?
-
我的建议是你先在纸上执行算法。将每个节点画成一个框,将链接(指针)画成带标签的箭头,并尝试先在纸上弄清楚如何做。然后当你有一些你认为可行的东西时,将算法转移到代码中。如果代码没有按预期工作,请在调试器中运行并逐行逐行执行代码,同时跟踪所有指针及其指向的内容(在纸上写下来也有帮助)。
-
@tobi303 好的,我会编辑它。谢谢。
标签: c++ linked-list swap