java - 如何使用自定义方法在链表的第 0 位插入节点?
问题描述
我创建了一种方法来在 LinkedList 中的第 N 个索引处插入一个节点。该代码适用于除第 0 个位置之外的所有位置。请在下面查看我的代码,让我知道出了什么问题。下面的代码有 2 种插入方法:
insert(int data)
:这用于添加新节点。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->空
解决方案
正如我建议的那样:您需要将 [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”成为第一个。
推荐阅读
- javascript - 动态创建内容时获取父DIV的ID
- javascript - 反应钩子:useState嵌套了其他useState,setState不起作用?
- graph - 获得具有公共节点的两个节点之间的最长路径
- encoding - 多状态因变量编码
- flutter - 如何在 Scaffold 中添加另一个按钮?
- java - 如何通过 Google Pay API 在 NODEMCU 上验证在 google pay 中进行的付款交易?
- sql - 与 SQL Server 的连接突然停止工作
- r - 在 R 中使用 deparse 进行强制评估
- python - 总和的梯度是否等于pytorch中神经网络的梯度总和?
- c# - 使用 Unity 注入启动的对象