Lea*_*ner 7 algorithm linked-list
给出一个链接的数字列表.交换每2个相邻的链接.例如,如果给您的链接列表是:
a->b->c->d->e->f
Run Code Online (Sandbox Code Playgroud)
预期产量:
b->a->d->c->f->e
Run Code Online (Sandbox Code Playgroud)
必须交换每2个备用链接.
我在这里写了一个解决方案.你能给我一些其他解决方案吗?你能评论一下我的解决方案并帮助我更好地写出来吗?
void SwapAdjacentNodes (Node head)
{
if (head == null) return;
if (head.next == null) return;
Node curr = head;
Node next = curr.Next;
Node temp = next.Next;
while (true)
{
temp = next.Next;
next.Next = curr;
curr.Next = temp;
if (curr.Next != null)
curr = curr.Next;
else
break;
if (curr.Next.Next!=null)
next = curr.Next.Next;
else
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个更简单版本的粗略草图,假设 Node 有“Next”和“Data”成员:
for (Node n = head; n && n.Next; n = n.Next.Next) {
void* tmp = n.Data;
n.Data = n.Next.Data;
n.Next.Data = tmp;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,在列表中的每个其他节点处停止并将其数据与下一个(下一个)交换。简单的。
编辑:上述解决方案交换节点内的数据,但不交换节点本身。如果要交换实际节点,解决方案需要更多逻辑。