我获得了指向链表头节点的指针,一个要添加到列表中的整数以及必须插入整数的位置。 将此节点插入所需位置后,我需要返回头节点。
我写的代码由于某种原因不起作用并且进入无限循环。
class Node {
int data;
Node next;
}
Node InsertNth(Node head, int data, int position) {
int count = 0;
Node node = head;
Node prev = null;
while(count != position){
count++;
node = node.next;
prev = node;
}
Node newNode = new Node();
newNode.data = data;
newNode.next = node;
if(count == 0){
head = newNode;
}else{
prev.next = newNode;
}
return head;
}
答案 0 :(得分:5)
node = node.next;
prev = node;
这应该是相反的顺序
prev = node;
node = node.next;
并且代码也没有检查很多情况,例如指定的位置是否大于链表的大小。尝试重写代码,也可以提一下您用于测试函数的值。
我认为prev=node
应抛出异常,因为prev未初始化
答案 1 :(得分:2)
首先,我找到了这个位置。 然后通过更改指针将新节点插入该位置。
Node InsertNth(Node head, int data, int position) {
Node newNode= new Node();
newNode.data=data;
Node ptr = head;
pos = pos - 1;
for (int i = 1; ; i++) {
if(ptr==null)
{ break;
}
if (i == pos) {
newNode.next=ptr.next;
ptr.next=newNode;
break;
}
ptr = ptr.next;
}
}
答案 2 :(得分:0)
public static Node InsertNth(Node head, int data, int position) {
Node node = new Node(data);
node.next = null;
if (head == null && position == 0){
head = node;
}
else if(head != null && position == 0){
node.next = head;
head = node;
}
Node tempCurrentNode = head ;
Node tempPreviousNode = null;
int index = 0;
while (index < position) {
tempPreviousNode = tempCurrentNode;
tempCurrentNode = tempCurrentNode.next;
index = index + 1;
}
node.next = tempCurrentNode;
tempPreviousNode.next = node;
return head;
}