c# - 双向链表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;
}
解决方案
推荐阅读
- javascript - 当 URL 更改时,如何关闭弹出窗口?
- android - 我如何根据应用程序主题(白天/夜晚)更改 icon.png android kotlin
- mysql - 将mysql查询转换为django orm,需要同一张表
- pdf - 有没有办法将 GeneXus QueryViewer 转换为 PDF?
- reactjs - 当使用 onFocus 事件更改状态时,React Material ui FilledInput 无法聚焦输入
- javascript - 输入验证不起作用 - 表单仍然提交?
- performance - 优化宏以根据标题对列顺序进行排序
- java - 如何使用 requestbody 使用 delete 方法进行调用
- php - 在购物车上显示总计减去运费
- amazon-web-services - 在让存储桶所有者保留对所有对象的所有权时启用 AWS 跨账户读取 + 写入的问题