JZ18刪除表的節點

蓝色的海嗷發表於2024-04-13

image
image

/**
 * 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;
    }
};

相關文章