C# 如何在链表中创建多个节点,然后遍历这些节点
我正在学习如何用c#制作链表。我有下面的代码,它不是为我工作。我只想在main中添加节点,如下所示,然后遍历将打印到控制台的所有节点C# 如何在链表中创建多个节点,然后遍历这些节点,c#,data-structures,linked-list,C#,Data Structures,Linked List,我正在学习如何用c#制作链表。我有下面的代码,它不是为我工作。我只想在main中添加节点,如下所示,然后遍历将打印到控制台的所有节点 using System; class node { public object data; public node next; public node() { data = null; next = null; } public node(object o) {
using System;
class node
{
public object data;
public node next;
public node()
{
data = null;
next = null;
}
public node(object o)
{
data = o;
next = null;
}
public node(object data, node next)
{
this.data = data;
this.next = next;
}
}
class linkedList
{
private node headNode;
private node tailNode;
int node_count;
public void add(object entry)
{
if (headNode == null)
{
node newNode = new node(entry);
headNode = newNode;
++node_count;
}
else
{
if (node_count == 1)
{
node newNode = new node(entry, headNode);
tailNode = newNode;
}
else
{
node newNode = new node(entry, tailNode);
tailNode = newNode;
}
++node_count;
}
}
public void returnData()
{
if (headNode.next != null)
{
while (headNode.next != null)
{
Console.WriteLine(headNode.data + "\n");
}
}
else
Console.WriteLine("Not Available");
}
}
class Exercise
{
static int Main()
{
linkedList ll = new linkedList();
ll.add(8);
ll.add(2);
ll.add(7);
ll.add(4);
ll.add(9);
ll.add(10);
ll.returnData();
Console.ReadLine();
return 0;
}
}
要打印数据,您需要执行
while(headNode.next!=null)
,以便遍历列表
看起来您从未更新过节点。下一步也一样
if (node_count == 1) // this seems unnecessary.
{
node newNode = new node(entry, headNode);
tailNode = newNode;
//should be node.next = newnode;
}
要打印数据,您需要执行while(headNode.next!=null)
,以便遍历列表
看起来您从未更新过节点。下一步也一样
if (node_count == 1) // this seems unnecessary.
{
node newNode = new node(entry, headNode);
tailNode = newNode;
//should be node.next = newnode;
}
你的代码完全被破坏了
以下是运行它所需的最小更改
using System;
class node
{
public object data;
public node next;
public node()
{
data = null;
next = null;
}
public node(object o)
{
data = o;
next = null;
}
public node(object data, node next)
{
this.data = data;
this.next = next;
}
}
class linkedList
{
private node headNode;
private node tailNode;
int node_count;
public void add(object entry)
{
node newNode = new node(entry);
if (headNode == null)
headNode = newNode;
if (tailNode != null)
tailNode.next = newNode;
tailNode = newNode;
++node_count;
}
public void returnData()
{
node currentNode = headNode;
if (currentNode == null)
Console.WriteLine("Not Available");
while (currentNode != null) {
Console.WriteLine(currentNode.data);
currentNode = currentNode.next;
}
}
}
class Exercise
{
static int Main()
{
linkedList ll = new linkedList();
ll.add(8);
ll.add(2);
ll.add(7);
ll.add(4);
ll.add(9);
ll.add(10);
ll.returnData();
return 0;
}
}
你的代码完全被破坏了
以下是运行它所需的最小更改
using System;
class node
{
public object data;
public node next;
public node()
{
data = null;
next = null;
}
public node(object o)
{
data = o;
next = null;
}
public node(object data, node next)
{
this.data = data;
this.next = next;
}
}
class linkedList
{
private node headNode;
private node tailNode;
int node_count;
public void add(object entry)
{
node newNode = new node(entry);
if (headNode == null)
headNode = newNode;
if (tailNode != null)
tailNode.next = newNode;
tailNode = newNode;
++node_count;
}
public void returnData()
{
node currentNode = headNode;
if (currentNode == null)
Console.WriteLine("Not Available");
while (currentNode != null) {
Console.WriteLine(currentNode.data);
currentNode = currentNode.next;
}
}
}
class Exercise
{
static int Main()
{
linkedList ll = new linkedList();
ll.add(8);
ll.add(2);
ll.add(7);
ll.add(4);
ll.add(9);
ll.add(10);
ll.returnData();
return 0;
}
}
你稍微转了一圈:D
首先,所有类名都应该以大写so Node(非Node)和LinkedList(非LinkedList)开头
现在,您可以使用此函数,但如果您试图返回只有一个节点的列表,则此函数将不起作用。。。因为您是在不直接地添加节点
public void returnData()
{
if (tailNode.next != null)
{
Node currentNode = tailNode;
while (currentNode != null)
{
Console.WriteLine(currentNode.data + "\n");
currentNode = currentNode.next;
}
}
else
Console.WriteLine("Not Available");
}
但是如果你想要一个更常规的经典linkedlist,你可以把linkedlist的add函数改成这个
public void add(object entry)
{
if (headNode == null)
{
Node newNode = new Node(entry);
headNode = newNode;
++Node_count;
}
else
{
if (Node_count == 1)
{
Node newNode = new Node(entry);
headNode.next = newNode;
tailNode = newNode;
}
else
{
Node newNode = new Node(entry);
tailNode.next = newNode;
tailNode = newNode;
}
++Node_count;
}
}
和返回数据到
public void returnData()
{
if (headNode.next != null)
{
Node currentNode = headNode;
while (currentNode != null)
{
Console.WriteLine(currentNode.data + "\n");
currentNode = currentNode.next;
}
}
else
Console.WriteLine("Not Available");
}
此代码将节点添加到列表的末尾。如果要将节点添加到列表的前面,可以修改添加功能
希望这对你有帮助,如果你还有其他问题,只要问你一个小小的转身:D
首先,所有类名都应该以大写so Node(非Node)和LinkedList(非LinkedList)开头
现在,您可以使用此函数,但如果您试图返回只有一个节点的列表,则此函数将不起作用。。。因为您是在不直接地添加节点
public void returnData()
{
if (tailNode.next != null)
{
Node currentNode = tailNode;
while (currentNode != null)
{
Console.WriteLine(currentNode.data + "\n");
currentNode = currentNode.next;
}
}
else
Console.WriteLine("Not Available");
}
但是如果你想要一个更常规的经典linkedlist,你可以把linkedlist的add函数改成这个
public void add(object entry)
{
if (headNode == null)
{
Node newNode = new Node(entry);
headNode = newNode;
++Node_count;
}
else
{
if (Node_count == 1)
{
Node newNode = new Node(entry);
headNode.next = newNode;
tailNode = newNode;
}
else
{
Node newNode = new Node(entry);
tailNode.next = newNode;
tailNode = newNode;
}
++Node_count;
}
}
和返回数据到
public void returnData()
{
if (headNode.next != null)
{
Node currentNode = headNode;
while (currentNode != null)
{
Console.WriteLine(currentNode.data + "\n");
currentNode = currentNode.next;
}
}
else
Console.WriteLine("Not Available");
}
此代码将节点添加到列表的末尾。如果要将节点添加到列表的前面,可以修改添加功能
如果您还有其他问题,请在编译和运行时询问@boltclock,它会给出一些不可用的建议,使您的代码更易于自己和他人阅读-开始遵循.NET命名约定:然后在出现错误时比“it up with not available”更具体一些。请阅读我的提问指南:@boltclock在编译和运行时,它会给出一些不可用的建议,以使您的代码更易于为您自己和他人阅读-开始遵循.NET命名约定:然后更具体地说明错误,而不是“it-up with not available”。阅读我的提问指南:抱歉,我在上传之前编辑了我的代码。。。不小心删除了那个部分,以为是别的东西。但这并不能解决我的问题。。我现在将编辑我的问题,包括抱歉我在上传之前编辑了我的代码。。。不小心删除了那个部分,以为是别的东西。但这并不能解决我的问题。。我现在将编辑我的问题,将其包括在内