闲话:昨晚喝了点小酒,回到宿舍已经一点多多了,倒头就睡了,今天下午先补上昨天的,今天晚上再写今天的题目(不喜欢连续刷题)
很简单的删除链表元素的操作,但有一点细节需要注意
思路:一个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;
}
}