1. 程式人生 > 其它 >leetcode-移除連結串列元素-9

leetcode-移除連結串列元素-9

技術標籤:oj題

移除連結串列元素

題目要求
  刪除連結串列中等於給定值val的所有節點。
示例1:
輸入:1->2->6->3->4->5->6,val = 6
輸出:1->2->3->4->5
思路
  如果陣列是空陣列,那麼直接返回頭結點。如果陣列全是目標節點,那麼就釋放所有空間,並且將頭結點置空,如果陣列前面僅僅只是有目標節點,將這些目標節點跳過,找到第一個不是目標節點的數,從這個節點開始,進行一快一慢指標的查詢,快指標負責找和val值一樣的節點,慢指標負責跳過,並將val空間釋放,next指標置空。
圖解
在這裡插入圖片描述
程式碼實現

struct ListNode* removeElements(struct ListNode* head, int val){
	if (head == NULL)
	{
		return head;
	}
	while (head != NULL && head->val == val)
	{
		if (head->next == NULL)
		{
			head->next = NULL;
			head = NULL;
			return head;
		}
		head = head->next;
	}

	//快
	struct ListNode* a = head->next;
	//慢
	struct ListNode* b = head;
	while (a != NULL)
	{
		//判斷是否是目標值
		if (a->val == val)
		{
			struct ListNode* c = a->next;
			b->next = c;
			a->next = NULL;
			free(a);
			a = c;
		}
		else
		{
			b = a;
			a = a->next;
		}
	}
	return head;
}