JZ18删除表的节点

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;
    }
};
posted @ 2024-04-13 20:06  蓝色的海嗷  阅读(5)  评论(0编辑  收藏  举报