【问题标题】:Insert a position in a linked list Java在链表Java中插入一个位置
【发布时间】:2021-10-04 06:21:03
【问题描述】:

我的问题是:编写一个函数,将新项目插入到给定位置的整数链接列表中。 我的代码是:

public static SinglyLinkedListNode insert_at_position(SinglyLinkedListNode head, int val, int pos) {
    
        SinglyLinkedListNode temp = head;
        
        if (pos == 0)
        {
            SinglyLinkedListNode newNode = new SinglyLinkedListNode(val);
            newNode = temp;
            head = newNode;
        }
        
        else if (pos > 0)
        {
            SinglyLinkedListNode newNode = new SinglyLinkedListNode(val);
            newNode = temp;
            head = newNode;
            
            for (int i = 0 ; i <= pos; i++)
            {
                  temp = head.next;
                  if (i == pos)
                  {
                      head.next = newNode;
                      newNode = temp;
                  }  
            }
        }
        return head;
 }

我的代码只打印了很多 1。它有什么问题?

【问题讨论】:

  • 你正在创建 newNode,然后你只是覆盖它?查看更多代码可能会有所帮助。例如,您在这里没有打印任何内容。此外,调用此方法的代码将很有用。而且没有main方法我们也无法调试。
  • 你可以参考这里,link
  • 只调试你的代码。逐步检查它,检查变量,看看你的代码没有做它应该做的事情。对于正确的解决方案:您可以通过简单的搜索找到它。

标签: java linked-list singly-linked-list


【解决方案1】:

一些问题:

  • 代码创建一个新节点,将其分配给newNode,然后立即将temp分配给newNode,从而失去对新创建节点的引用

  • temphead 的值初始化,然后newNode 得到temp 的值,然后head 得到temp 的值。这意味着您已将 head 设置为 ...head,这是一个无操作。

  • 循环在每次迭代中执行temp = head.next;。这将始终在每次执行时将 same 引用放在temp... 中。因此循环的迭代次数变得无关紧要。 temp 将始终引用列表中的第二个节点。这样做会更有意义temp = temp.next

  • 在最后一次迭代中,您设置了head.next = newNode; ...甚至忽略了您对temp 所做的操作。此分配不使用循环迭代期间完成的任何操作。也可以在循环外执行。

  • 最后一条语句newNode = temp 没有做任何有用的事情。 newNode 在该语句之后从未使用过,因此它可能不存在。如果是newNode.next = temp 会更有意义。这将有效地将newNode 链接到可能的下一个节点。

  • 循环迭代太多次。由于您已使用pos == 0 在列表的开头插入新节点,pos == 1 应该在head 节点之后插入新节点,为此 no 迭代是必要的。只有当pos &gt; 2 需要迭代时。

这是一个更正的版本:

public static SinglyLinkedListNode insert_at_position(SinglyLinkedListNode head, 
                                                      int val, int pos) {        
    SinglyLinkedListNode newNode = new SinglyLinkedListNode(val);
    if (pos == 0) {
        newNode.next = head;
        head = newNode;
    } else if (pos > 0) {
        SinglyLinkedListNode temp = head;
        for (int i = 1; i < pos; i++) {
            temp = temp.next;
        }
        newNode.next = temp.next;
        temp.next = newNode;
    }
    return head;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2021-06-06
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多