首页 > 解决方案 > 如何使用自定义方法在链表的第 0 位插入节点?

问题描述

我创建了一种方法来在 LinkedList 中的第 N 个索引处插入一个节点。该代码适用于除第 0 个位置之外的所有位置。请在下面查看我的代码,让我知道出了什么问题。下面的代码有 2 种插入方法:

  1. insert(int data):这用于添加新节点。
  2. insertAtNthPositon(int position, int data):这有助于在第 N 个位置插入元素。
public class LinkedList {
    Node head;

    static class Node {
        int data;
        Node next;
    }

    public void insert(int data) {
        Node new_node = new Node();
        new_node.data = data;
        new_node.next = null;

        if (head == null) {
            head = new_node;
        } else {
            Node n = head;
            while (n.next != null) {
                n = n.next;
            }
            n.next = new_node;
        }
    }

    public void insertAtNthPositon(int position, int data) {
        Node new_node = new Node();
        new_node.data = data;
        Node current_node = head;

        int i = 0;
        if (position == 0) {
            new_node.next = current_node.next;
            head = new_node;
            current_node = current_node.next;
        }
        while (i < position - 1) {
            current_node = current_node.next;
            i++;
        }
        new_node.next = current_node.next;
        current_node.next = new_node;
    }

    public static void main(String[] arg) {

        LinkedList ls = new LinkedList();
        ls.insert(6);
        ls.insert(7);
        ls.insert(9);
        ls.insertAtNthPositon(1, 100);
        ls.show();

    }

    private void show() {
        Node current = head;
        StringBuilder sb = new StringBuilder();
        do {
            sb.append(current.data);
            sb.append("->");
            current = current.next;
        } while (current != null);
        sb.append("null");
        System.out.println(sb.toString());
    }
}

输出:

6->100->7->9->空

标签: javalinked-list

解决方案


正如我建议的那样:您需要将 [at: if (position == 0)] new_node.next 设置为 current_node 而不是 current_node.next -> 这就是为什么您总是从索引 1 而不是 0 开始的原因。

   public void insertAtNthPositon(int position, int data){
    Node new_node = new Node();
    new_node.data =data;
    Node current_node = head;

    int i = 0;
    if (position == 0){
        **new_node.next = current_node;** <instead of current_node.next>
        head = new_node;
        current_node = current_node.next;
    }
    while(i < position - 1){
        current_node = current_node.next;
        i++;
    }
    new_node.next = current_node.next;
    current_node.next = new_node;
}

BTW-ls.insertAtNthPositon(1, 100); 在索引 1 处插入 100,你想做 ls.insertAtNthPositon(0, 100); 为了让“100”成为第一个。


推荐阅读