我一直在使用 C# 处理 LeetCode 问题,并且在尝试将 linkedlistnode 的下一个值设置为新节点时注意到一个问题,即“属性或索引器......Next 无法分配给 - 它是只读'。我可以从节点的下一个读取,但无法将节点分配给节点的下一个。为什么 .NET 会出现这种情况?
var l1Value = l1 == null ? 0 : l1.Value;
var l2Value = l2 == null ? 0 : l2.Value;
var newNode = new LinkedListNode<int>((l1Value + l2Value + overflow) % 10);
start.Next = newNode; <------ red squiggly
start = start.Next; <------ no red squiggly
Run Code Online (Sandbox Code Playgroud)
您应该使用AddBefore//AddAfter方法将元素添加到列表中。AddFirstAddLastLinkedList
我不知道 100%,但我假设 API 表面不允许您修改Nexta 的元素LinkedListNode,因为这会让您最终遇到奇怪的事情,例如循环、不完整的列表等。主要是造成不一致状态的事情。该文档LinkedList说不支持:
该类
LinkedList<T>不支持链接、拆分、循环或其他可能使列表处于不一致状态的功能。该列表在单个线程上保持一致。唯一支持的多线程场景LinkedList<T>是多线程读取操作。
作者决定最好提供方法来完成常见的插入/删除操作并确保所有正确的事情发生,而不是使用设置器公开低级别Next/属性。Previous例如,他们确保两者Next并Previous在每次插入/删除时得到更新。如果他们允许您修改Next或Previous直接修改,则无法确保两者在必要时始终更新。您仍然可以完成您需要的任务,但是当人们自己实现这些操作时,它们限制了出现错误的可能性。