Я хотел бы получить отзыв о методе, который я написал относительно вставки элемента в связанный список.Мне было дано определение класса связанного списка:
public class List {
private Node head;
private static class Node {
public String data;
public Node next;
public Node(String data, Node next) {
//Assign data and next here
}
//Optional Node helper methods are written here
}
//List methods and data go here
На основе этого определения я пытаюсь создать метод вставки.Я не уверен, включает ли определение, которое мне дали, метод size()
, но я предположил, что это не так, и попытался найти способ найти размер (в основном, сколько узлов в списке) в моем методе вставки.Метод имеет сигнатуру public void insert(String s, int psn)
Этот метод также должен выдавать исключение IllegalArgumentException, когда задано недопустимое значение индекса (psn) (вне границ).Я предполагаю, что диапазон значений psn
от 0 до каждого первого нулевого элемента (пожалуйста, исправьте меня, если я ошибаюсь в этом. Это метод, который я написал:
public void insert(String s, int psn) {
Node temp = head; //Save original head
int c = 0;
while (temp != null) { //Traverse linked list
c++;
temp = temp.next;
}
if (psn < 0 || psn >= c) { //Should throw exception when illegal value is used
throw new IllegalArgumentException();
}
if (psn == 0) { //Special case when inserting an element at the front of the list
head = new Node(s, head);
} else if (head != null) {
Node current = head; //Save original head while traversing list
while (current != null) {
current = current.next;
psn--;
}
if (current != null) { //We are at the position where we want to insert the element
current.next = new Node(s, current.next);
}
}
}
Может кто-тоскажите мне, правильно ли я использовал первый цикл while, когда дело доходит до определения длины связанного списка, и правильно ли я использовал его за исключением? Это та часть, которая меня больше всего беспокоит. Заранее большое спасибо!