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

    一、题目

      1、审题

      

      2、分析

        将链表中值为 val 的节点去除。

    二、解答

      1、思路:

        方法一、

          创建一个头结点,将后边的值为 val 的节点一一删除。

        public ListNode removeElements(ListNode head, int val) {
         
            if(head == null) return null;
            
            ListNode fakeHead = new ListNode(0);
            while(head != null && head.val == val) // 处理头结点
                head = head.next;
            
            fakeHead.next = head;
            
            while(head != null && head.next != null) {
                if(head.next.val == val)
                    head.next = head.next.next;
                else
                    head = head.next;
            }
            return fakeHead.next; 
        }

      优化: 采用 pre、cur 指针,使代码更简洁

        public ListNode removeElements3(ListNode head, int val) {
    
            if(head == null) return null;
            ListNode fakeHead = new ListNode(0);
            fakeHead.next = head;
            ListNode curr = head, prev = fakeHead;
            
            while(curr != null) {
                if(curr.val == val) 
                    prev.next = curr.next;
                else
                    prev = prev.next;
                curr = curr.next;
            }
            return fakeHead.next;
        }

      方法二、

        采用递归

        public ListNode removeElements2(ListNode head, int val) {
            
            if(head == null)
                return null;
            
            head.next = removeElements(head.next, val);
            return head.val == val ? head.next : head;
        }
  • 相关阅读:
    12个非常不错的javascript类库
    CSS中单位em和rem的区别
    CSS中box-sizing属性的作用
    网页设计中的默认字体样式详解
    jQuery遍历Table表格的行和列
    css常用解决方案
    JS判断字符串小括号是否成对合法
    Less编码规范
    React九宫格抽奖
    n个有序数组,取出k个最大值
  • 原文地址:https://www.cnblogs.com/skillking/p/9819653.html
Copyright © 2011-2022 走看看