C# 单链表反转
我猜这个问题是因为我缺乏数据结构方面的知识,但问题是如何反转单链表?我的印象是,使用“previous”字段或属性来解决此问题会使单链接列表成为双链接列表,但我在网上找到的所有解决方案都涉及使用previous属性。我在这里遗漏了什么?您可以通过遍历列表来重建列表。“弹出”的第一个元素将是结果中的最后一个元素,即伪代码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
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
变量仅用于存储循环中检查的最后一个节点。这也不在名单上。啊,谢谢你,先生。这就是为什么我感到困惑。