【发布时间】:2014-04-19 06:07:39
【问题描述】:
我遇到了以下实现,用于在单次遍历中交换链表中从开始到结束的第 k 个位置。
node *list;
node *p, *q, *r;
p = q = r = list;
i = 1;
while(p != NULL)
{
if(i != k)
{
q = q->next;
i++;
}//q will eventually point to kth node from starting
if(i == k)
{
r = r->next
}//r will eventually point to kth node from end
p = p->next;
}
Swap q & r elements
但我觉得这不是正确的实现,有人可以看看它并验证它是否正确吗?
如果错了,我需要做出哪些改变?
【问题讨论】:
-
你知道列表的大小吗?
-
请自行测试代码,而不是询问它是否适用于Stack Overflow。感觉和 Stack Overflow 都不能很好地替代您的编译器。
-
是的@arunmoezhi,我预先知道尺寸。
-
如果是双向链表,可以双向遍历找到第K个元素,然后交换它们的值
-
对于大小为 N 的单链表,找到第 K 个元素,然后找到第 N-K+1 个元素并交换它们的值
标签: c data-structures linked-list