本篇要來介紹 LinkedList 的 addLast() & getAt()
本篇同時發布於好讀整理版
addLast() 在 LinkedList 的後面加上 element
這次我們來點不同的做法,不要再 while loop 找最後一個那招了。
既然我們都實作過 getLast(),那 addLast() 就簡單多了。
我們只要找到最後一個,然後往後加入就可以了~
addLast(data){
const last = this.getLast()
// check node exists
if(last){
last.next = new Node(data);
} else {
this.head = new Node(data);
}
}
Source from openjdk-1.8
public void addLast(E e) {
linkLast(e);
}
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
getAt() 取得在 LinkedList 中的第幾個 (index) 元素並回傳該元素。
解法: 從 head node 開始每一次加一個,宣告一個變數 counter 每加一次+1,
用來數加幾次了,就可以知道是第幾個 node
注意: chain 的長度需要留意。
getAt(index){
let counter = 0;
let node = this.head;
while(node){
if(counter === index){
return node
}
counter++
node = node.next
}
return null
}
Source from openjdk-1.8
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
private void checkElementIndex(int index) {
if (!isElementIndex(index))
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
本篇同時發布於好讀整理版