0
点赞
收藏
分享

微信扫一扫

每日刷题:第十天 移除链表元素

mm_tang 2022-04-13 阅读 32
leetcode

闲话:昨晚喝了点小酒,回到宿舍已经一点多多了,倒头就睡了,今天下午先补上昨天的,今天晚上再写今天的题目(不喜欢连续刷题)

很简单的删除链表元素的操作,但有一点细节需要注意

思路:一个while循环对整个链表进行遍历,到达每一个结点,用一个小循环保证当前结点指向的下一个节点的值必须不是val,最后返回头部节点

细节:对头部的处理,大家可以看到我的思路,对当前结点的值是无法判断的,所以对于头部节点是没有办法的,因此我在最开始添加了一个虚拟头部节点,让头指针指向虚拟头部节点,这样子原来的头结点就变为了下一个节点。

感触:很基础的一道链表操作题,但确实是我第一次接触链表这种数据结构,所以写起来还是有点生疏(自己写的代码有点丑),感觉链表有许多细节需要注意,因此我大概总结了一点链表处理方法论,之后如果发现错误我也会积极改正,也希望大家给予批评与指正

①永远是判断下一个节点(原因:若下一个结点有什么问题,可以修改当前结点的next做出删添操作)

②要创建一个虚拟头部节点,来完善第一条原则

③一次判断对应一次操作,例如:当前的下一位的值是给定值,那么就会删除下一个节点,之后本节点就不应该动了

通过代码(java)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //创建一个头部节点
        ListNode top = new ListNode(0,head);
        //标记头部
        head = top;
       //判断下一个节点的值是否等于val
       while( head != null && head.next != null)
       {
           //相等,删除
           while( head.next != null && head.next.val == val )
           {
               head.next = head.next.next;
           }
           head = head.next;
       }
       //让指针下移一位
       top = top.next;
        return top;
    }
}
举报

相关推荐

python(第十天)

【JavaSE 第十天】

web第十天

HCIP第十天

第十天学习

0 条评论