Insert a position in a linked list Java(在链接列表中插入位置Java)
问题描述
我的问题是:编写一个函数,将一个新项插入到给定位置的整数链表中。 我的代码是:
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
,然后立即将temp
分配给newNode
,从而丢失对新创建节点的引用temp
用head
的值初始化,然后newNode
得到temp
的值,然后head
得到temp
的值。这意味着您已将head
设置为...head
,即无操作。循环在每次迭代中执行
temp = head.next;
。这将始终将相同的引用放入temp
...每次它执行的时候。因此循环的迭代次数变得无关紧要。temp
将始终引用列表中的第二个节点。这样做会更有意义temp = temp.next
在上次迭代中设置
head.next = newNode;
...即使忽略您对temp
所做的操作。此赋值不使用在循环迭代期间所做的任何操作。它也可以在循环之外执行。最后一条语句
newNode = temp
没有做任何有用的事情。newNode
从未在该语句之后使用过,因此它也可能不在那里。如果是newNode.next = temp
,那就更有意义了。这将有效地将newNode
链接到可能的下一个节点。循环迭代次数太多。因为您已经使用
pos == 0
在列表的开始处插入了新节点,所以pos == 1
应该在head
节点之后插入新节点,因此不需要迭代。仅当pos > 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;
}
这篇关于在链接列表中插入位置Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在链接列表中插入位置Java
- C++ 和 Java 进程之间的共享内存 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01