LinkedList 建構子與 addFirst()#

建構子是拿來初始化物件用的。

當初始化 LinkedList 並產生實體(instance),這個實體會有一個屬性head,這個 head 會指向第一個 node,預設為 null, 因為還沒有資料在新的(初始化的) LinkedList 裡面。

LinkedList 只知道 head 屬性,它並不知道裡面有多少 node,也不知道有什麼資料,他只知道第一個 node, 其他都要靠第一個 node 去做功能。

Java 本身就有 LinkedList 物件可以操作,因此我們先實作 JavaScript 的 LinkedList,後面會提供 Java 範例。

JavaScript LinkedList 實作#

class LinkedList {
constructor() {
this.head = null;
}
}

addFirst()#

head node 後面加上第一個元素,如果本來就有其他元素,其他元素會往後面排,head reference 會改變成 addFirst() 過後的。

class LinkedList {
constructor() {
this.head = null;
}
addFirst(data) {
const node = new Node(data, this.head); // this.head 往後排的意思
this.head = node; // 第一個換人當
}
}

addFirst() 可以簡寫成

addFirst(data) {
this.head = new new Node(data, this.head);
}

測試 JavaScript 我們的 LinkedList#

class Node {
constructor(data, next = null) {
this.data = data;
this.next = next;
}
}
class LinkedList {
constructor() {
this.head = null;
}
addFirst(data) {
this.head = new Node(data, this.head);
}
}
const node1 = new Node("car1");
const list = new LinkedList();
list.head = node1;
list.addFirst("car2");
console.log(list);

輸出

LinkedList {
head: Node { data: 'car2', next: Node { data: 'car1', next: null } }
}

Java 內建 addFirst()#

LinkedList mylist = new LinkedList();
mylist.addFirst("car1");
mylist.addFirst("car2");
mylist.addFirst("car3");
System.out.println(mylist);

輸出

[car3, car2, car1]

本文同時發布於鐵人賽