zoukankan      html  css  js  c++  java
  • 每天一道leetcode203-移除链表的元素

    考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰

    前言

    2018.11.7号打卡
    明天的题目leetcode141-环形链表:
    https://leetcode-cn.com/problems/linked-list-cycle/

    题目

    leetcode203-移除链表的元素
    中文链表:
    https://leetcode-cn.com/problems/remove-linked-list-elements/description/
    英文链接:
    https://leetcode.com/problems/remove-linked-list-elements/description/
    分类:链表:

    题目详述

    删除链表中等于给定值 val 的所有节点。
    示例:
    输入: 1->2->6->3->4->5->6, val = 6
    输出: 1->2->3->4->5

    题目详解

    思路

    • 首先是删除开头的节点与val值相等的节点;
    • 然后是删除中间的与val相等的节点,采取之前的这道题的解法,就是交换当前节点与下一个节点的val值,然后把下一个节点删除就行;
    • 最后处理最后的一个节点。

    代码

     1/**
    2 * Definition for singly-linked list.
    3 * public class ListNode {
    4 *     int val;
    5 *     ListNode next;
    6 *     ListNode(int x) { val = x; }
    7 * }
    8 */

    9class Solution {
    10    public ListNode removeElements(ListNode head, int val) {
    11        if(head == null)
    12            return head;
    13        while(head != null && head.val == val)
    14            head = head.next;
    15        if(head == null)
    16            return head;
    17        ListNode temp = head.next;
    18        ListNode pre = head;
    19        while(temp != null)
    20        {
    21            if(temp.next == null)
    22            {
    23                if(temp.val != val)
    24                    break;
    25                pre.next = null;
    26                break;
    27            }
    28            if(temp != null && temp.val == val)
    29            {
    30                int value = temp.next.val;
    31                temp.val = value;
    32                temp.next = temp.next.next;
    33            }else
    34            {
    35                pre = temp;
    36                temp = temp.next;
    37            }
    38
    39        }
    40        return head;
    41    }
    42}

    代码讲解

    • 13-14行去判断开头的节点,如果头结点与val值相等,那么该删除,直到头结点值不相等
    • 17-18行是保留一个pre的前置节点,以便删除最后一个节点(如果与val相等)
    • 21-27行是处理最后一个节点,如果最后一个节点是val,那么删除最后一个节点,pre的下一个就是最后一个节点;
    • 28-32行如果中间的当前节点与val值相等,那么通过交换当前节点的值与下一个节点的值以后,删除一个节点的;
    • 35-36行如果与val不相等,那么直接继续往前移动。

    结束语

    2018.11。7打卡

    作者乔戈里亲历2019秋招,哈工大计算机本硕,百度准入职java工程师,欢迎大家关注我的微信公众号:程序员乔戈里,公众号有3T编程资源,以及我和我朋友(准入职百度C++工程师)在秋招期间整理的近200M的面试必考的java与C++面经,并有每天一道leetcode打卡群与技术交流群,欢迎关注。

  • 相关阅读:
    Java中Class.forName()用法和newInstance()方法详解
    开发和学习中好用的工具
    ubuntu修改默认的apt源
    区块链共识算法总结(PBFT,Raft,PoW,PoS,DPoS,Ripple)
    比特币白皮书:一个点对点的电子现金系统(百度网盘)
    session和cookie的区别
    HTTP中GET,POST和PUT的区别
    三小时快速入门Python终结篇--其他模块导入
    C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序}
    C++ 实现vector<std:string> 版本
  • 原文地址:https://www.cnblogs.com/qiaogeli/p/9926128.html
Copyright © 2011-2022 走看看