首页 > 解决方案 > 双向链表C#中两个元素的交换

问题描述

如何交换两个链表的两个元素(通过切换链接)?我意识到我需要考虑四种情况:更改第一个/最后一个元素、更改相邻元素以及所有其他情况。细胞结构如下:

public class Item<T>
{
    private T _Data;
    private Item<T> _Next;
    private Item<T> _Prev;

    public T Value
    {
        get { return _Data; }
        set { this._Data = value; }
    }
    public Item(T Data)
    {
        this._Data = Data;
    }
    public Item()
    {
        this._Data = default;
    }
    public Item<T> Next
    {
        get { return this._Next; }
        set { this._Next = value; }
    }
    public Item<T> Prev
    {
        get { return this._Prev; }
        set { this._Prev = value; }
    }
}

这是一种实现尝试。怎么了

    public override D_List<T> Sorting(D_List<T> a)
    {
        for (int top = 1; top < a.Count; top++)
        {
            int k = top;
            while (k > 0 && a[k-1] > a[k])
            {
                k--;
            }

            if (k == 0)
            {
                a[top].Prev.Next = a[top].Next;
                a[top].Next.Prev = a[top].Prev;
                a[top].Next = a[k];
                a[top].Prev = null;
                a[k].Prev = a[top];
            }
            else if(k == a.Count - 2)
            {
                a[k].Prev.Next = a[top];
                a[top].Prev = a[k].Prev;
                a[k].Next = null;
                a[k].Prev = a[top];
            }
            else if(k+1 == top)//стоят подряд
            {
                a[k].Prev.Next = a[top];
                a[top].Prev = a[k].Prev;
                a[k].Next = a[top].Next;
                a[top].Next = a[k];
                a[k].Next.Prev = a[k];
            }
            else
            {
                a[k].Prev = a[top];
                a[top].Prev.Next = a[top].Next;
                a[top].Next.Prev = a[top].Prev;
                a[top].Prev = a[k].Prev;
                a[top].Next = a[k];
                a[top].Next.Prev = a[top];
            }
        }
        return a;
    }

标签: c#doubly-linked-listcompare-and-swap

解决方案


推荐阅读