public static SinglyLinkedListNode insertNodeAtPosition(SinglyLinkedListNode llist, int data, int position) {
if(llist == null) {
llist = new SinglyLinkedListNode(data);
return llist;
} else {
for (int i = 0; i < position-1; i++) {
llist = llist.next;
}
SinglyLinkedListNode temp = llist;
llist.next = new SinglyLinkedListNode(data);
llist = llist.next;
llist.next = temp.next;
return llist;
}
}
这是我在 LinkedList 中放置自定义索引节点的代码。但 hackerrank 不接受我的代码。我的算法有什么问题吗?
看什么:
我不会提供更正后的代码,但会给你两个提示:llist
for
,您将丢失对第一个节点的引用,因此请使用不同的变量来遍历列表。
此外,您应该专门处理
position
为 0 的情况,因为这是唯一一种返回值不是原始 llist
值,而是新节点的引用的情况,就像在
if
中一样块。最简单的解决方案无需解释: 解决方案:
static SinglyLinkedListNode insertNodeAtPosition(SinglyLinkedListNode head, int data, int position) {
if (head == null) return null;
SinglyLinkedListNode temp = new SinglyLinkedListNode(data);
if (position == 0) {
temp.next = head;
return temp;
}
SinglyLinkedListNode p = head;
for (int i = 0; i< position-1; i++) {
p = p.next;
}
SinglyLinkedListNode next = p.next;
p.next = temp;
temp.next = next;
return head;
}
问题要求你返回一个链表。当我们被要求返回一个链表时,实际上我们返回的是链表的第一个节点。
最简单的解决方案是将第一个节点保留在另一个变量中,并且
完成插入操作后返回该变量。 例如:
SinglyLinkedListNode dumyNode = llist;
......
return dumyNode;
private Node find(int index) {
Node curr = head;
for (int i = 0; i < index; i++)
curr = curr.next;
return curr;
} // end find()
public Object get(int index) throws IndexOutOfBoundsException {
if (index >= 0 && index < size) {
Node curr = find(index);
return curr.data;
} else {
throw new IndexOutOfBoundsException();
} // end if - else
} // end get()
public void add(Object data, int index) throws IndexOutOfBoundsException {
if (index >= 0 && index < size + 1) {
if (index == 0)
head = new Node(data);
else {
Node prev = find(index - 1);
prev.next = new Node(data);
} // end if - else
size++;
} else {
throw new IndexOutOfBoundsException();
} // end if - else
} // end add()
单链表默认插入值并按位置
public class Main {
private Node head;
public void insert(int data,int position){
Node newNode=new Node(data);
if(head==null){
head=newNode;
return;
}
Node current=head;
int counter=0;
boolean flag=true;
while(current.next!=null){
if(counter==position){
current.data=data;
flag=false;
}
current=current.next;
counter++;
}
if(flag) {
current.next=newNode;
}
}
public void insert(int data){
Node newNode=new Node(data);
if(head==null){
head=newNode;
return;
}
Node current=head;
while(current.next!=null){
current=current.next;
}
current.next=newNode;
}
public void display(){
Node current=head;
while(current!=null){
System.out.println(current.data);
current=current.next;
}
}
public static void main(String[] args) {
System.out.println("Try programiz.pro");
Main obj=new Main();
obj.insert(10);
obj.insert(20);
obj.insert(30);
obj.insert(40);
obj.insert(70,4);
obj.display();
}
}
class Node{
int data;
Node next;
Node(int data){
this.data=data;
this.next=null;
}
}