/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可
*
*
* @param head ListNode類
* @param val int整型
* @return ListNode類
*/
ListNode* deleteNode(ListNode* head, int val) {
// write code here
//思路:設定一個迴圈,挨個遍歷連結串列的節點,對比節點的值和要查詢的值是否相等,
//如果相等,就刪除該節點
//如果找到最後都沒找到,就直接返回該連結串列
//先判空
if(head == NULL ) //如果頭節點為空,就直接返回空指標
return nullptr;
if(head ->next ==NULL) //如果第二個節點為空,就判斷頭節點是否為val值
{
if(head ->val == val)
return nullptr;
else
return head;
}
//怎麼刪除節點?
//設定一個額外的指標,讓這個指標指向該節點的下一個節點
//然後進行刪除操作
ListNode* p1 = head; //p1指向head
ListNode* p2 = head->next; //讓p2指向head的下一個節點
//迴圈遍歷對比val值
while (p2) {
if(p1->val == val) //如果頭節點等於val值
{
return p2;
}
if(p2->val == val) //如果p2指向val值
{
p1 ->next = p2->next;
}
//p1 p2往後移動
p1 = p1->next;
p2 = p2->next;
}
return head;
}
};