zoukankan      html  css  js  c++  java
  • 203.移除链表元素

    题目描述

    删除链表中等于给定值 val 的所有节点。

    示例:

    输入: 1->2->6->3->4->5->6, val = 6
    输出: 1->2->3->4->5

     

    注意点

    1、删除点在开头;

    2、删除点在结尾;

    3、连续删除两个位置;

    4、需delete手动释放内存;

    头结点命中处理

    1、头结点命中特殊处理;

    2、引入虚拟头结点;

    删除操作

    1、两个指针完成删除;

    2、一个指针完成删除;

    方法一

    头结点命中特殊处理,利用两个指针完成删除操作;

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeElements(ListNode* head, int val) {
            if( head == NULL )
        		return head;
    
        	ListNode *p = head;
        	ListNode *pre = p;
        	while( p )
        	{
        		if( p->val == val )
        		{
        			if( pre == p )
        			{
        				head = head->next;
        				p = head;
        				pre = p;
        			}
        			else
                    {
                    	pre->next = p->next;
                    	p = p->next;
                    }
        		}
        		else
        		{
        			pre = p;
        			p = p->next;
        		}
        	}
    
        	return head;
        }
    };
    

      

     

    方法二

    引入虚拟头结点,利用两个指针完成删除操作;

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeElements(ListNode* head, int val) {
            if( head == NULL )
        		return head;
    
        	ListNode *res = new ListNode(0);
        	ListNode *p = head;
        	res->next = head;
        	ListNode *pre = res;
        	while( p )
        	{
        		if( p->val == val )
        			pre->next = p->next;
        		else
        			pre = p;
        		p = p->next;
        	}
    
        	return res->next;
        }
    };
    

      

    方法三

    引入虚拟头结点,一个指针完成删除;

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeElements(ListNode* head, int val) {
            if( head == NULL )
        		return head;
    
        	ListNode *res = new ListNode(0);
        	res->next = head;
            ListNode *p = res;
    
        	while( p->next )
        	{
        		if( p->next->val == val )
        		{
        			ListNode *tmp = p->next;
        			p->next = p->next->next;
        			delete tmp;
        		}
        		else
        			p = p->next;
        	}
    
        	return res->next;
        }
    };
    

      

  • 相关阅读:
    七牛云上传博客
    .net 导入Excel
    liunx ln -s 软连接
    dos2unix 命令
    x-csrf-token
    设置git 不提交 修改权限的文件
    nginx 启动、重启、关闭
    命令行导入mysql数据
    mongo 相关命令
    laravel 安装完成后安装 vendor 目录
  • 原文地址:https://www.cnblogs.com/Christal-R/p/14217645.html
Copyright © 2011-2022 走看看