Skip to main content

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]

本文同時發布於鐵人賽