ITPub博客

首页 > 应用开发 > IT综合 > 算法单链表交换任意两个元素

算法单链表交换任意两个元素

IT综合 作者:dongyu2013 时间:2014-04-15 16:12:39 0 删除 编辑
先一次遍历找到这两个元素curr1和curr2,同时存储这两个元素的前驱元素pre1和pre2。
然后大换血
public static Link SwitchPoints(Link head, Link p, Link q)
{
    if (p == head || q == head)
        throw new Exception(“No exchange with head”);
    if (p == q)
        return head;
    //find p and q in the link
    Link curr = head;
    Link curr1 = p;
    Link curr2 = q;
    Link pre1 = null;
    Link pre2 = null;

    int count = 0;
    while (curr != null)
    {
        if (curr.Next == p)
        {
            pre1 = curr;
            count++;
            if (count == 2)
                break;
        }
        else if (curr.Next == q)
        {
            pre2 = curr;
            count++;
            if (count == 2)
                break;
        }
        curr = curr.Next;
    }
    curr = curr1.Next;
    pre1.Next = curr2;
    curr1.Next = curr2.Next;
    pre2.Next = curr1;
    curr2.Next = curr;
    return head;
}
注意特例,如果相同元素,就没有必要交换;如果有一个是表头,就不交换。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29012686/viewspace-1142634/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 视图和表的区别
请登录后发表评论 登录
全部评论

注册时间:2013-12-25

  • 博文量
    263
  • 访问量
    238065