英文:
How do I insert a node in linked list at 0th position using a custom method?
问题
我已经创建了一个方法,在第N个索引处插入一个节点到链表中。对于除了第0个位置之外的所有位置,该代码都正常工作。请查看下面的代码,并告诉我哪里有问题。
以下代码有两个插入方法:
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;
head = new_node;
} else {
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->null
英文:
I have created a method to insert a node in LinkedList at Nth index. The code works fine for all the positions except 0th position. Please review my code below and let me know what's wrong.
The below code has 2 insert methods:
insert(int data)
: This used to add a new node.insertAtNthPositon(int position, int data)
: This helps to insert the element at Nth position.
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());
}
}
Output:
>6->100->7->9->null
答案1
得分: 0
正如我所建议的:你需要设置 [在位置:如果(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; // 而不是 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;
}
顺便说一下,ls.insertAtNthPositon(1, 100);
是在索引 1 处插入 100,如果你想要将 100
插入为第一个元素,应该使用 ls.insertAtNthPositon(0, 100);
。
英文:
Just as I suggested: you need to set [at: if (position == 0)] the new_node.next to current_node and not current_node.next -> this is why you always start from index 1 and not 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); insert 100 at index 1, you want to do ls.insertAtNthPositon(0, 100); in order for '100' to be the first.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论