概述
本次写的题目是移除链表元素,为LeetCode里面的题目,让我们来康康是如何解出这道题目的吧,各位尚没有思路的小伙伴可以跟随着博主的解题思路一步步来,感受一下????
????分析阶段
第一眼见该题目,是一个链表中的某一个值的所有元素都给移除掉,于是按照题目,我们可以画出下面的情况????:
情况①相对来说是较好解决的,我们只需要用到两个变量,创建两个节点,一个命名为del,另一个命名为cur,del作为探针的角色,然后cur紧随其后,当del探到了要删的元素,便将cur的next变为del的下一个节点,就如下图一样????:
在要删除元素为23的情况下:
但如果要将连续的要删除元素给跳过,我们要让cur在del碰到要删元素的时候,将这个元素删除,即让cur的next变为del的next,链接del的下一个节点;但当del不为要删元素的时候,我们要及时把cur给跟上。然后del继续往后探索????:
以上便是分析阶段全部了~接下来请看代码阶段????
????代码阶段
整个题目中最重要的是要做到 当遇到要删元素的时候将del的next赋给cur的next 和 当没有遇到要删元素的时候cur要跟上del ,这两种情况是相反的情况,所有我们可以用if else语句来实现:
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode cur = head;
ListNode del = cur;
while(del!=null){
if(del.val==val){
cur.next = del.next;
del = del.next;
}else{
cur = del;
del = del.next;
}
}
return head;
}
}
通过以上操作,我们就能够轻松地将要删的单独元素或连续要删元素都给删去了????下面来跑一遍试一下????:
???? ???? ???? ???? ???? ???? 怎么会报错!!!!
看了最终输出的结构,按原本的预期应该是一个没有,现在确还剩下一个7????咋回事。
将这个例子放入我们的代码中自己过一遍后发现原来少了一种情况:当开头也有要删元素的时候
所以,博主针对该情况又在代码最后加多了一段代码来处理该情况:
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode cur = head;
ListNode del = cur;
while(del!=null){
if(del.val==val){
cur.next = del.next;
del = del.next;
}else{
cur = del;
del = del.next;
}
}
if(head!=null&&head.val==val){
head = head.next;
}
return head;
}
}
再跑一遍逝逝????
nice????✨
以上!便是全部的啦????
又是收获满满的一天~
最后
以上就是飞快电灯胆为你收集整理的LeetCode第203题—移除链表元素????分析阶段????代码阶段的全部内容,希望文章能够帮你解决LeetCode第203题—移除链表元素????分析阶段????代码阶段所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复