美文网首页
链表相关问题

链表相关问题

作者: 机器学习与自然语言处理 | 来源:发表于2019-04-27 15:06 被阅读0次

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

示例:

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

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        /**
        * 为了避免下一个节点还是要删除的节点,这里使用while循环,来进行判断
        */
        
        while (head!=null && head.val == val) {
            ListNode delNode = head;
            head = head.next;
            delNode.next = null;
           //以上三行代码可以用一行代替 head = head.next;
        }
        //再删除掉头节点是需要删除的节点之后,如果后面的节点已经是空了,那就直接返回了
        if(head==null) {
            return null;
        }
        ListNode prev = head;
        while(prev.next != null) {
            if (prev.next.val == val) {
                //在删除节点后,prev节点并没有向后移动,这样避免下一个节点还是要删除的节点
                ListNode delNode = prev.next;
                prev.next = delNode.next;
                delNode.next =null;
//以上三行代码也可以用一行代替prev.next = prev.next.next 
            } else {
                prev = prev.next;
            }
        }
                    return head;

    }
}

也可以采用虚拟头节点的方式来优化这段代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
     
        //新建一个头节点,并且随机赋值
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;       
        ListNode prev = dummyHead;
        while(prev.next != null) {
            if (prev.next.val == val) {
                //在删除节点后,prev节点并没有向后移动,这样避免下一个节点还是要删除的节点
                ListNode delNode = prev.next;
                prev.next = delNode.next;
                delNode.next =null;
            } else {
                prev = prev.next;
            }
        }
            return dummyHead.next;

    }
}

相关文章

  • 1.数据结构-链表问题

    链表相关问题 删除节点 链表去重 有环链表 反转链表 链表排序 链表相交 其他问题 面试题 02.03. 删除中间...

  • 链表相关问题

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

  • Java常用类库与技巧-集合

    一 数据结构常见问题 数组和链表的区别;链表的操作,如反转,链表环路检测,双向链表,循环链表相关操作;队列,栈的应...

  • 链表相关问题整理

    1、比较顺序表和链表的优缺点, 说说它们分别再什么场景下使用? 顺序表存储(典型的数组) 原理:顺序表存储是将数据...

  • 链表的环相关问题

    题目 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明: 不允许修改给定的链表。...

  • 面试必看算法题|链表问题总结

    前言 链表的相关问题,在面试中出现频率较高,这些问题往往也是解决其他复杂问题的基础;在这篇文章里,我将梳理链表问题...

  • 算法面试题 | 链表问题总结

    前言 链表的相关问题,在面试中出现频率较高,这些问题往往也是解决其他复杂问题的基础; 在这篇文章里,我将梳理链表问...

  • 算法学习--双指针

    双指针分类 快慢指针 左右指针 快慢指针:主要解决链表相关问题,比如:典型的判断链表中是否包含环、链表倒是第K个节...

  • 单链表相关学习笔记(C语言)

    以此文记录学习单链表的相关知识,以备后续回顾复习。完整代码:链表学习相关的笔记和代码(C 语言) 一、单链表相关说...

  • 数据结构-链表

    相关掌握点 单向链表 双向链表 反转单向链表 判断链表是否含有环 链表构建 链表是一种线性结构,是通过指针引用节点...

网友评论

      本文标题:链表相关问题

      本文链接:https://www.haomeiwen.com/subject/fxdknqtx.html