在看到编程访问站点时,我遇到了交换链接列表中相邻元素的代码,但我发现它有点不对。以下是代码。交换链接列表中的相邻元素
void swap (struct list **list1)
{
struct list *cur, *tmp, *next;
cur = *list1;
if (cur && cur->next)
*list1 = cur->next;
//To make sure that we have at least two more elements to be swapped.
while (cur && cur->next)
{
next = cur->next;
tmp = next->next;
next->next = cur;
//We have to make 1->next as 4 in above example (figure).
if (tmp)
cur->next = tmp->next;
cur = tmp;
}
return;
}
现在对我来说,条件if (temp)
是不是在这里。该评估是否正确?
假设我们有一个链表,如:
1->2->3->4->NULL
现在我们的目标是使一个链表,如:
2->1->4->3->NULL
我担心的是,如果if (temp)
有没有在我们的代码,我们不能在链表的末尾分配空值。
感谢您的答复@Eran。我想,如果我们简单地删除这一行,如果(TMP),代码应该没有任何其他修改做工精细。 –
@Amit,删除“if(tmp)”不会使它工作 - 你仍然在列表的末尾有一个循环,如果列表中有奇数个节点,你也会放弃最后一个。为了面试的缘故,我真的希望这段代码被故意弄糊涂了。在现实世界中,你最好将列表实现与其内容分开,并使用'std :: list '左右。将使交换数据变得如此容易...... – eran
@Amit,只是想知道 - 你首先接受了这个答案,然后不接受它(或者叫做......)。为什么这不能回答你的问题的任何特殊原因? – eran