给出一个链接的数字列表.交换每2个相邻的链接

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)

dka*_*ins 2

这是一个更简单版本的粗略草图,假设 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)

换句话说,在列表中的每个其他节点处停止并将其数据与下一个(下一个)交换。简单的。

编辑:上述解决方案交换节点内的数据,但不交换节点本身。如果要交换实际节点,解决方案需要更多逻辑。

  • 为什么要交换数据...必须交换节点...而不是数据 (7认同)