很久以前我没有使用过C或C ++,所以完全忘掉了指针。我熟悉C#并编写了一个基本版本。需要知道我是对还是错?
输入:链接列表a-> b-> c-> d-> e-> null
输出:链接列表b-> a-> d-> c-> e-> null
我们必须编写代码,以便交换内存位置而不是节点值。
public void SwapLinkedList(LinkedList<int> LL)
{
LinkedListNode<int> current = LL.First;
while (current.Next != null)
{
int temp = current.Next.Value;
current.Next.Value = current.Value;
current.Value = temp;
current = current.Next.Next;
}
}
答案 0 :(得分:4)
LinkedListNode
中的LinkedList
订单无法更改,因为LinkedListNode
仅允许获取Previous
和Next
属性。因此,要更改LinkedList
内的排序,您只能交换值(允许一组)。
为了让这个工作,我会使用这些扩展方法来使交换更通用:
public static class LinkedListExtensions
{
public static LinkedList<T> SwapPairwise<T>(this LinkedList<T> source)
{
if (source == null)
throw new ArgumentNullException("source");
var current = source.First;
if (current == null)
return source;
while (current.Next != null)
{
current.SwapWith(current.Next);
current = current.Next;
if (current != null)
current = current.Next;
}
return source;
}
public static void SwapWith<T>(this LinkedListNode<T> first, LinkedListNode<T> second)
{
if (first == null)
throw new ArgumentNullException("first");
if (second == null)
throw new ArgumentNullException("second");
var tmp = first.Value;
first.Value = second.Value;
second.Value = tmp;
}
}
答案 1 :(得分:0)
如果你有关于LinkedListNode的参考,请选择删除并添加:
public static LinkedListNode<T> SwapWith<T>(LinkedListNode<T> first, LinkedListNode<T> second)
{
first.List.Remove(first);
second.List.AddAfter(second, first);
return second;
}