zoukankan      html  css  js  c++  java
  • 203. Remove Linked List Elements

    原文题目:

    203. Remove Linked List Elements

    读题:

    删除链表中节点的值与目标值相等的节点,这和单链表删除某个节点不一样的地方在于,可能需要删除多个节点。

    解法一是自己写的,利用两个指针p和q,如果p,q相等,则将p->next = q->next,跳过q节点

    解法二是AC代码里比较好的

    //方法一 42ms
    class Solution 
    {
    public:
    	ListNode* removeElements(ListNode* head, int val) 
    	{
    		ListNode* temp = new ListNode(0);
    		temp->next = head;
    		ListNode *p = temp;
    		ListNode* q = head;
    		while(q)
    		{
    			//相等则删除该节点,
    			if(q->val == val)
    			{
    				p->next = q->next;
    			}
    			//不相等则将p指向q节点,这里的p至是临时指针,最后返回的是temp,因此p的改变不影响返回
    			else
    			{
    				p = q;
    			}
    			q = q->next;
    		}
    		return temp->next;
    	}
    };
    //方法二 25ms
    class Solution {
    public:
    	ListNode* removeElements(ListNode* head, int val) {
    
    		if(!head) return nullptr;
    		
    		//递归处理,将head的下一个节点指向剩余处理过的链表
    		head->next = removeElements(head->next, val);
    		
    		//当head第一个节点为目标值,则将head往后移动一个节点即可,
    		if(head->val == val)
    		{
    			ListNode * temp = head;
    			head = head->next;
    			delete temp;
    		}
    
    		return head;
    	}
    };
    

      

  • 相关阅读:
    象棋
    支持向量机
    朴素贝叶斯分类
    规则归纳
    监督学习
    序列模式
    关联规则
    从《数据挖掘概念与技术》到《Web数据挖掘》
    数据挖掘在大数据中的应用综述
    join sql图
  • 原文地址:https://www.cnblogs.com/xqn2017/p/8006793.html
Copyright © 2011-2022 走看看