在链表的开头插入
Insertion at beginning in the linked list
我是数据结构的初学者。我试图在链表的开头插入一个新节点。但是根本没有插入节点。问题仅出现在开始时的插入中。
请帮我
这是我的代码
public class singlylinkedlist {
link head;
static class link
{
int data;
link nextNode;
link(int dat)
{
data=dat;
nextNode=null;
}
}
public static void insertbegin(link head,int x)
{
link newnode=new link(x);
newnode.nextNode=head;
head=newnode;
}
static void display(link head)
{
if(head==null) System.out.println("empty list");
else
{
link temp=head;
while(temp!=null)
{
System.out.println(temp.data);
temp=temp.nextNode;
}
}
}
public static void main(String args[])
{
singlylinkedlist link=new singlylinkedlist();
link.head=new link(2);
insertbegin(link.head,1);
display(link.head);
}
}
提前致谢
首先,我强烈建议您重命名 classes。 Java classes 应始终以大写字母开头(大驼峰式)。并且变量和方法应该始终是小驼峰式(例外:静态最终变量通常是 all-caps)。
现在回答您的问题:您的错误在于以下几点:在您的方法中,如果您将新值分配给提供给该方法的 head
变量,则该更改只会影响变量 head
给方法(仅在方法范围内)。如果要更改实际的 head
变量,则需要将新值直接分配给 classes head
变量。
根据你的use-case,有3种解决方案:
- 您需要 LinkedList 实现的多个实例:
- 将方法
insertBegin
和 display
更改为 non-static。
- 删除方法的第一个参数,因为它们现在可以访问 class
的变量 head
- 您只需要一个 LinkedList 实现实例(这不是一个很好的解决方案):
- 在 class
static
中创建你的 head 变量
- 删除方法的第一个参数,因为它们现在可以访问 class
的变量 head
- 您想为 variables/methods 保留 static/non-static 模式(无论出于何种原因):
- 更改
head
变量的行为:它现在从不存储实际数据,而是将实际头部(带有数据)存储为其 nextNode
变量。
display
现在总是从 head.nextValue
开始读取
insertBegin
现在不必覆盖实际的 head 变量。它只需要将其 nextNode
变量设置为新的 head
如果你愿意,我可以举一个例子来说明其中一个案例。我只是不想把它们都写出来让你自己想办法。
如果您想提高 Java 技能,我还建议您查看变量和方法的各种可见性选项(私有、受保护、public、默认)
您的代码有很多错误。这不是编写链表的方式。请参阅 @MichaelRitter 的回答并更正它们。
使 singlylinkedlist
class 中的所有函数成为非静态的,将 link
class 移到 singlylinkedlist
class 之外并写入 main()
方法在 singlylinkedlist
class 之外的另一个 class 中。
就你的insertbegin()
方法而言,你首先要做到non-static。此外,您只需要接受要在开头插入的函数参数中的整数值;取链表的头节点在这里没有用。此外,您需要在执行任何操作之前检查链表的头节点是否为 null
,否则您将得到 NullPointerException
.
这是 singlylinkedlist
class 的 insertbegin()
方法的工作版本:
public void insertbegin(int x){
link temp = new link(x);
if(head == null)
head = temp;
else{
link ts = head;
head = temp;
head.nextNode = ts;
}
}
如果你想在名为link
的单链表的开头插入1
,你可以调用insertbegin()
函数:
link.insertbegin(1);
希望对您有所帮助。
我是数据结构的初学者。我试图在链表的开头插入一个新节点。但是根本没有插入节点。问题仅出现在开始时的插入中。 请帮我 这是我的代码
public class singlylinkedlist {
link head;
static class link
{
int data;
link nextNode;
link(int dat)
{
data=dat;
nextNode=null;
}
}
public static void insertbegin(link head,int x)
{
link newnode=new link(x);
newnode.nextNode=head;
head=newnode;
}
static void display(link head)
{
if(head==null) System.out.println("empty list");
else
{
link temp=head;
while(temp!=null)
{
System.out.println(temp.data);
temp=temp.nextNode;
}
}
}
public static void main(String args[])
{
singlylinkedlist link=new singlylinkedlist();
link.head=new link(2);
insertbegin(link.head,1);
display(link.head);
}
}
提前致谢
首先,我强烈建议您重命名 classes。 Java classes 应始终以大写字母开头(大驼峰式)。并且变量和方法应该始终是小驼峰式(例外:静态最终变量通常是 all-caps)。
现在回答您的问题:您的错误在于以下几点:在您的方法中,如果您将新值分配给提供给该方法的 head
变量,则该更改只会影响变量 head
给方法(仅在方法范围内)。如果要更改实际的 head
变量,则需要将新值直接分配给 classes head
变量。
根据你的use-case,有3种解决方案:
- 您需要 LinkedList 实现的多个实例:
- 将方法
insertBegin
和display
更改为 non-static。 - 删除方法的第一个参数,因为它们现在可以访问 class 的变量
head
- 将方法
- 您只需要一个 LinkedList 实现实例(这不是一个很好的解决方案):
- 在 class
static
中创建你的 head 变量
- 删除方法的第一个参数,因为它们现在可以访问 class 的变量
head
- 在 class
- 您想为 variables/methods 保留 static/non-static 模式(无论出于何种原因):
- 更改
head
变量的行为:它现在从不存储实际数据,而是将实际头部(带有数据)存储为其nextNode
变量。 display
现在总是从head.nextValue
开始读取
insertBegin
现在不必覆盖实际的 head 变量。它只需要将其nextNode
变量设置为新的 head
- 更改
如果你愿意,我可以举一个例子来说明其中一个案例。我只是不想把它们都写出来让你自己想办法。
如果您想提高 Java 技能,我还建议您查看变量和方法的各种可见性选项(私有、受保护、public、默认)
您的代码有很多错误。这不是编写链表的方式。请参阅 @MichaelRitter 的回答并更正它们。
使 singlylinkedlist
class 中的所有函数成为非静态的,将 link
class 移到 singlylinkedlist
class 之外并写入 main()
方法在 singlylinkedlist
class 之外的另一个 class 中。
就你的insertbegin()
方法而言,你首先要做到non-static。此外,您只需要接受要在开头插入的函数参数中的整数值;取链表的头节点在这里没有用。此外,您需要在执行任何操作之前检查链表的头节点是否为 null
,否则您将得到 NullPointerException
.
这是 singlylinkedlist
class 的 insertbegin()
方法的工作版本:
public void insertbegin(int x){
link temp = new link(x);
if(head == null)
head = temp;
else{
link ts = head;
head = temp;
head.nextNode = ts;
}
}
如果你想在名为link
的单链表的开头插入1
,你可以调用insertbegin()
函数:
link.insertbegin(1);
希望对您有所帮助。