移除单项链表元素(分析)
LeetCode第203号问题 https://leetcode-cn.com/problems/remove-linked-list-elements/
给你一个链表的头节点
head
和一个整数val
,请你删除链表中所有满足Node.val == val
的节点,并返回 新的头节点 。
使用JAVA的方式来解决:
首先定义一个单项列表的类:
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 header = new ListNode(-1); //创建一个虚拟头结点
header.next = head; //让虚拟头header结点指向链表的头结点head
ListNode cur = header; //创建一个结点用于充当"指针"的作用
while(cur.next != null) //当目前结点的next不为空时,持续运行
{
if(cur.next.val == val ) //当此结点的下一个结点的内容与输入数字相同,则跳过下一个结点;但“指针”没有移动
{
cur.next = cur.next.next;
}else //当当此结点的下一个结点的内容与输入数字不相同,则保留下一个结点;然后“指针”指向下一个结点
{
cur = cur.next;
}
}
return header.next; //返回虚拟头结点的下一个结点
}
}
虚拟头结点(header)的目的是为了防止头结点(head)被删除后,无法进行后续操作。而cur相当于“指针”的作用。