1. 程式人生 > 其它 >【LeetCode移除連結串列元素】

【LeetCode移除連結串列元素】

技術標籤:演算法連結串列leetcode

題目

刪除連結串列中給出定值val的所有節點

在這裡插入圖片描述

新增一個虛擬頭結點

我們的想法是從頭結點開始遍歷,一旦發現有和給定的val值相等的節點,將其刪除即可
但是因為連結串列的性質,我們想要刪除節點,就要找到該節點前一個和後一個節點
所以我們就判斷指標所指位置的下一個位置的值
如果這樣的話,頭節點就不能檢測了
所以我們新增一個虛擬頭結點,用來檢測頭結點


ListNode* removeElements(ListNode* head, int val) {
	ListNode* virtualNode =new ListNode(val - 1);
	virtualNode-
>next = head;//虛擬頭結點 ListNode* p = virtualNode; while (p->next != NULL) { if (p->next->val == val) { p->next = p->next->next;; } else { p = p->next; } } return virtualNode->next;//返回時不需返回虛擬頭結點 }

刪除頭結點的時候另作考慮

ListNode* removeElements(ListNode* head, int val)
{ while (head != NULL && head->val == val) { head = head->next;//後移一步 } if (head == NULL) { return head; } ListNode* p = head; while (p->next != NULL) { if (p->next->val == val) { p->next = p->next->next;; } else { p = p->next; } } return head;
//返回時不需返回虛擬頭結點 }

遞迴

ListNode* removeElements(ListNode* head, int val) {
	if (head == NULL) {
		return NULL;
	}
	head->next = removeElements(head->next, val);
	if (head->val == val) {
		return head->next;
	}
	else {
		return head;
	}
}