Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单链表反转_C#_Singly Linked List - Fatal编程技术网

C# 单链表反转

C# 单链表反转,c#,singly-linked-list,C#,Singly Linked List,我猜这个问题是因为我缺乏数据结构方面的知识,但问题是如何反转单链表?我的印象是,使用“previous”字段或属性来解决此问题会使单链接列表成为双链接列表,但我在网上找到的所有解决方案都涉及使用previous属性。我在这里遗漏了什么?您可以通过遍历列表来重建列表。“弹出”的第一个元素将是结果中的最后一个元素,即伪代码 new_list = nothing while p != nothing: next = p.next p.next = new_list new_li

我猜这个问题是因为我缺乏数据结构方面的知识,但问题是如何反转单链表?我的印象是,使用“previous”字段或属性来解决此问题会使单链接列表成为双链接列表,但我在网上找到的所有解决方案都涉及使用previous属性。我在这里遗漏了什么?

您可以通过遍历列表来重建列表。“弹出”的第一个元素将是结果中的最后一个元素,即伪代码

new_list = nothing
while p != nothing:
    next = p.next
    p.next = new_list
    new_list = p
    p = next

您可以通过遍历列表来重建列表。“弹出”的第一个元素将是结果中的最后一个元素,即伪代码

new_list = nothing
while p != nothing:
    next = p.next
    p.next = new_list
    new_list = p
    p = next

假设单链接列表中的典型节点类似于:

class Node
{
    Node Next {get; set;}
    int Data {get; set;}
}
当你试图倒转一个列表时,一件很有用的事情就是想象一下你将如何“用手”完成它。例如,假设您有以下列表:

[head] 9 --> 3 --> 5 --> 1 --> 7 --> [null]
你会想做一些像

[null] <-- 9 <-- 3 <-- 5 <-- 1 <-- 7 [head]

假设单链接列表中的典型节点类似于:

class Node
{
    Node Next {get; set;}
    int Data {get; set;}
}
当你试图倒转一个列表时,一件很有用的事情就是想象一下你将如何“用手”完成它。例如,假设您有以下列表:

[head] 9 --> 3 --> 5 --> 1 --> 7 --> [null]
你会想做一些像

[null] <-- 9 <-- 3 <-- 5 <-- 1 <-- 7 [head]

您可以创建一个堆栈,按顺序将每个项目推到堆栈上,然后将每个项目从堆栈中弹出。当然,这是假设你知道堆栈是如何工作的。如果这是一个面试问题,那么重点是你要解释你将如何做。如果你不知道,那么你就不知道;在互联网上问陌生人是作弊:)itsme86使用“prevnode”的例子不就是一个双链接列表吗?D Stanley,使用堆栈不是作弊吗,因为它使用一个单独的数据结构来反转列表?@B你的问题中没有任何东西禁止使用单独的数据结构。“prevnode”也是一个局部变量,而不是节点元素的属性或字段,这不会使它成为一个双链接列表。@bman:将堆栈实现为一个链接列表,这样就不用使用单独的数据结构了。所以,练习:你能将堆栈实现为链表吗?你可以创建一个堆栈,按顺序将每个项目推到堆栈上,然后将每个项目从堆栈中弹出。当然,这是假设你知道堆栈是如何工作的。如果这是一个面试问题,那么重点是你要解释你将如何做。如果你不知道,那么你就不知道;在互联网上问陌生人是作弊:)itsme86使用“prevnode”的例子不就是一个双链接列表吗?D Stanley,使用堆栈不是作弊吗,因为它使用一个单独的数据结构来反转列表?@B你的问题中没有任何东西禁止使用单独的数据结构。“prevnode”也是一个局部变量,而不是节点元素的属性或字段,这不会使它成为一个双链接列表。@bman:将堆栈实现为一个链接列表,这样就不用使用单独的数据结构了。那么,练习:你能将堆栈实现为链表吗?那么,上一个节点不会使其成为双链表吗?我的印象是使用前一个节点就可以了。不,双链接列表有一个
节点
类,该类同时具有
Next
previous
属性(此列表中的节点基于答案顶部的
节点
类,该类只有
Next
属性)。
Node previous
变量仅用于存储循环中检查的最后一个节点。这也不在名单上。啊,谢谢你,先生。这就是为什么我感到困惑的原因。那么,上一个节点不会使这成为一个双链接列表?我的印象是使用前一个节点就可以了。不,双链接列表有一个
节点
类,该类同时具有
Next
previous
属性(此列表中的节点基于答案顶部的
节点
类,该类只有
Next
属性)。
Node previous
变量仅用于存储循环中检查的最后一个节点。这也不在名单上。啊,谢谢你,先生。这就是为什么我感到困惑。