LeetCode 203. Remove Linked List Elements
題目
Remove all elements from a linked list of integers that have value val.
Example Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6 Return: 1 --> 2 --> 3 --> 4 --> 5
翻譯
給一個值val,移除連結陣列中所有值為val的節點。
思路
- 走訪連結陣列,只要比對目前節點與val相等,就移除目前這點
- 移除一個節點,其實是讓前一個節點跳過目前節點直接指向下一個節點
- [1,6,3,5] val=3 ,移除[3],因此我們需要知道[3]的前一點是[6]讓[6].next -> [5]
解題
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
if(head == null) return null;
// prev一開始為假節點,例如[2],val=2的時候,就可以讓假節點指向null,完成移除的動作
var node = new ListNode(0);
// [1,2,3] val=2,當走到[2]的時候,移除目前[2]這點的方法是讓[1]跳過2直接接[3],變成[1,3],
// 所以這邊需要先儲存前一個節點prev來備用
var prev =node;
node.next = head;
while(head != null){
if(head.val != val){
// 目前節點與val不相等,往下一個
prev = head;
head = head.next;
} else {
// 目前節點與val相等,跳過目前節點
prev.next = head.next;
head = head.next;
}
}
return node.next;
};