題鏈接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/

利用雙指標求解,第一個指向當前節點,第二個指向當前節點的上一個節點,找到要洗掉的節點,直接讓第二個指標指向此節點的下一個節點即可,因為頭節點也有可能被洗掉,所以要使用一個虛擬節點指向頭節點,回傳時只回傳虛擬節點的下一個節點即可,
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var deleteNode = function(head, val) {
if (head == null) {
return null;
}
//初始化一個虛擬節點
let preNode = new ListNode(-1);
//讓虛擬節點指向頭節點
preNode.next = head;
let resNode = preNode;
//遍歷鏈表
while (head != null) {
if (head.val == val) {
//找到要洗掉的節點,便讓此節點的前驅節點指向它的下一個節點
preNode.next = head.next;
break;
}
//沒找到則往后移一步
preNode = head;
head = head.next;
}
//回傳虛擬節點的下一個節點
return resNode.next;
};
設鏈表有n個節點:
時間復雜度:O(n)
空間復雜度:O(1)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/155460.html
標籤:其他
