【问题标题】:What should be the name of the prev_node argument passed into the method given below?传递给下面给出的方法的 prev_node 参数的名称应该是什么?
【发布时间】:2020-11-03 21:15:49
【问题描述】:
public class linkedList {
  Node head;

   class Node {
    int data;
    Node next;
    Node(int d){
      data  = d;
    }
  }    
    public void insertAfter(Node prev_node, int new_data){
    if (prev_node == null){
      System.out.print("The given previous node cannot be null");
      return;
    }
    Node new_node = new Node(new_data);
    new_node.next = prev_node.next;
    prev_node.next = new_node;
  }
}

对于给定的链表:11,73,80,41,22,如果我想在 73 之后插入一个数字(例如 0),我可以将其传递为 insertAfter(llist.head.next,0)

但这是我所能达到的命名 prev_node 的范围。如果我想在第三、第四……等位置之后输入 0,则作为参数输入。那么争论会是什么呢?

PS:如果标题具有误导性或混淆性,请原谅我,我无法用正确的词来表达标题。

【问题讨论】:

  • 你的问题到底是什么?
  • 欢迎来到 SO!您是否要求为 prev_node 参数取一个有意义的名称?给定 insertAfter 方法名称,prev_node 对我来说看起来不错。不确定我是否正确地回答了您的问题。
  • @Alfeu,这个问题确实令人困惑。由于我没有命名节点,我无法将它们的节点名称输入到 prev_node,所以如果第三个节点(80)是我的 prev_node,则必须在参数中传递什么值才能使方法了解我是哪个节点我在谈论。

标签: java linked-list parameter-passing nodes


【解决方案1】:

如果我理解你的问题,你想知道当你想在不同位置插入数据时应该为参数传递什么。仅提供 insertAfter 方法,您需要手动遍历链表。在您给出的示例中,如下所示:

Insert after 11 -> insertAfter(llist.head, 0)
Insert after 73 -> insertAfter(llist.head.next, 0)
Insert after 80 -> insertAfter(llist.head.next.next, 0)
Insert after 41 -> insertAfter(llist.head.next.next.next, 0)
Insert after 22 -> insertAfter(llist.head.next.next.next.next, 0)

但这不是正确的方法。您需要提供遍历机制以及其他可以在头部、列表末尾、给定位置等添加值的方法。

【讨论】:

    【解决方案2】:

    你需要一个方法,从链表的头部开始,遍历到想要的位置,然后返回那个Node。然后,您可以将该节点用作 insertAfter() 方法的参数。

    public Node getNodeAtPosition(Node head, int position){
        if (head == null || position < 0) 
            throw new IllegalArgumentException("head == null or position < 0");
        Node helper = head;
        while (position != 0) {
            if (helper == null) 
                throw new IllegalArgumentException("position > length of list");
            helper = helper.next;
            position--;
        }
        return helper;
    }
    

    【讨论】:

    • 嘿@Shail,我也想到了这个想法,但我需要一些验证。谢谢。
    • 是的,你需要确保链表不为空,并且0
    • @Dusty 如果解决了您的疑问,请对此答案投赞成票并将其标记为已接受。谢谢!
    • 嘿@Shail,我赞成您的回答,但由于 SO 政策规定声望低于 15 的人的投票被记录,因此不会显示,但不要更改公开显示的帖子分数。干杯
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 2015-01-25
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多