移除链表元素--双指针法

移除链表元素–双指针法

本系列记录了在刷Leetcode时的一些心得体会。也包括自己的做题思路。该题题目为移除链表元素,采用双指针来解决,语言为C++

思路:
1.判断head是否为空,若空返回NULL or nullptr。(链表问题常用)
2.pre和cur分别指向第一个节点和第二个节点。
3.cur判断是否相等,若相等,一直删下去;若不相等,两个节点同时以相同速度往尾部方向移动。跳出循环。
4.这时,相当于除了第一个节点没被判断外,链表其他节点都进行了判断。所以只需要再次判断第一个节点是否与给定值相等,若相等,头指针后移动,若不相等,直接返回head;

代码

// code

struct ListNode
{
    
    
    int m_val;
    ListNode* next;

    ListNode(int x) :m_val(x), next(NULL){
    
    }
};

class Solution {
    
    
private:
    ListNode *pre;
    ListNode *cur;
public:
    ListNode* removeElements(ListNode* head, int val) {
    
    
        if (head == NULL){
    
     return head; }
        
        pre = head;
        cur = head->next;
        
        while(cur != NULL)
        {
    
    
            if (cur->val == val)
            {
    
    
                ListNode *p_cur = cur;
                pre->next = cur->next;
                cur = cur->next;
                delete p_cur;
                
            }
            else
            {
    
    
                pre = pre->next;
                cur = cur->next;
            }
        }
        
        
        if (head->val == val)
        {
    
    
            ListNode *p_head = head;
            head = head->next;
            delete p_head;
            
        }
        
        return head;

    }
};

猜你喜欢

转载自blog.csdn.net/qq_40550384/article/details/106770493