当前位置: 首页 > 知识库问答 >
问题:

添加新节点添加LinkedList的开头和LinkedList的结尾

盖雪峰
2023-03-14

公共类插入节点{

public static void main(String[] args) {
    // TODO Auto-generated method stub
    LinkedList list=new LinkedList();
    list.head=new Node(2);
    list.head.next=new Node(3);


    addFront(list.head,8);

    System.out.println(list);

    addEnd(list.head,11);

    System.out.println(list);
     addEnd(list.head,15);

    System.out.println(list);

  }
public static void addFront(Node head,int value)
{
   Node newHead=new Node(value);
   newHead.next=head;
   head=newHead;

}

 public static void addEnd(Node head,int value) {

     Node newHead=new Node(value);
     Node ref=head;
     Node last=ref;

     while(ref!=null) {
         last=ref;
         ref=ref.next;
     }
     last.next=newHead;


 }

}

您好,代码在LinkedList add head和add last的实现之上。但是,当我运行代码时,我可以添加新节点作为链表上的最后一个节点,但我不能将新节点添加到链表的请求中。

运行此代码时,输出为:

 head 2 --> 3 -->  null

 head 2 --> 3 --> 11 -->  null

 head 2 --> 3 --> 11 --> 15 -->  null

加数法有效,但为什么不加前置呢?

共有2个答案

夏侯朝斑
2023-03-14

因为节点头是指向列表的addFront()的局部变量。头部。当您执行head=newHead操作时,您只需将局部变量指向刚刚创建的新节点。main()中的列表完全不受影响。

使用加数,您不需要修改列表的第一个元素,因此不需要发送列表。您也不修改主列表,只修改最后一个元素,对于该方法来说,这就足够了。

您需要将列表发送给该方法,以便它可以访问其属性。

我使用的是C#,不是Java,但我想这应该可以:

    ...
    addFront(list, 8);
    ...
}

public static void addFront(LinkedList list,int value)
{
   Node newHead=new Node(value);
   newHead.next=list.head;
   list.head=newHead;
}

这里的list也是一个局部变量,但它指向主列表,所以list。磁头是相同的记忆位置,任何修改都会影响主列表。头部。如果您碰巧执行了list=something,它同样不会影响主列表,只会影响局部变量。

顺便说一句,尽量使用适当的变量名称,这样代码就不会混淆。在addend中,您的变量不应该被命名为newHead

阎修明
2023-03-14

在下面的调用中,您实际上传递的是list的头节点的内存位置,而不是实际的头对象:

addFront(list.head,8);

然后,通过引用方法签名(即节点头)来保持存储器位置。

头-

然后,在方法主体内,您只需将引用重置为新的内存位置:

头-

请注意:list.head是一个非原始对象,在java中,非原始对象是通过引用传递的。

 类似资料:
  • 我的问题在我的main方法中,如何向链表中添加多个节点....我现在先从节点2和节点3开始..我以为我添加了这些节点,但是我意识到我并没有对这些节点和它们的值做任何事情,对吗?如何使用setData()和setNext()来添加所有这些节点?这有意义吗? 如果上面设置了值,如何将它们全部添加? 然后,我需要为每一项设置数据和下一步吗?(这似乎是多余的,因为我似乎在上面的构造函数中设置了每个节点的值

  • 正如我所知,ArrayList以2^n+1的大小复制数组。而linkedlist只更改节点

  • 我已经开始使用Java。我想将内置Java LinkedList类与我的自定义节点类一起使用(我的节点类将包含字段:数据、向下指针、右指针)。有可能吗? 下面是我的节点类: 我创建了以下实例: LinkedList h=新的LinkedList 我想在java中使用内置的链表类实现一个2D链表。为了能够做到这一点,我想实现我的自定义节点。

  • 我正在将以下数据作为赋值的一部分读取到二叉树(不是严格的二叉查找树)中: 它们被读取到python、和中的三个列表中,其中第一行具有整数是节点数。接下来的n行是键,左,右。其中左是父级左子级的键是,同样右子级的键是,因此例如第一行是4的键是根,意味着2是4的左子级,意味着5是4的右子级,以此类推,-1代表左右意味着这个键是叶子: 此示例的树结构 问题是正在添加根的左右子节点,但没有添加其中的任何子

  • 我的任务是搜索中的值,如果找到某个值,则应将其删除并放置在的开头。

  • 我想在java中创建一个哈希表类,将键和值对存储在链表的ArrayList中 然后,我想创建一个链接列表对象,然后可以使用该对象在arrayList的每个索引内创建一个新的链接列表。为此,我声明: 然后我设置了add函数以将元素添加到LinkedList的第一个索引中,该索引位于arrayList的哈希键索引中: 每次运行此代码时,我都会收到一个错误,其中我的索引为7而我的大小为0。这会导致错误: