[Leetcode 203][Easy]移除链表元素
创始人
2024-12-06 17:07:16

目录

一、题目描述

二、整体思路

三、代码


 

一、题目描述

原题链接

二、整体思路

         首先分成两种情况。第一种情况要先判断头元素是否要删除。第二种要在第一种基础上进行(删除到头元素不是要删除的元素),然后遍历链表,遍历到不是要删除的元素再链接。

        最开始的想法:遍历链表的时候不能直接用head,否则会改变head,要新设一个ListNode prev=head。用prev去链接不符合删除元素的结点。同时新设ListNode temp=head.next用于遍历。

        关于链表,要想清楚的地方是:prev指向的ListNode类,改变其next属性。和head通过迭代访问next属性所访问到的类的next属性也会一起改变,因为两者访问到的是同一个类。

        改进后的思路:不另外设置temp结点。只利用prev结点就足够了。当prev的下一个结点不是要被删除的结点时才更新prev,否则删除prev的下一个结点。

三、代码

/**  * 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) {                  while(head!=null && head.val==val){//首元素是要被删除的情况             head=head.next;         }         if(head==null) return head;//链表为空与所有元素都为要被删除的元素的情况         ListNode temp=head.next;         ListNode prev=head;         while(true){             if(temp!=null && temp.val!=val){//不是被删除的元素,要保留                 prev.next=temp;                 prev=prev.next;             }else if(temp==null){                 prev.next=null;                 break;             }             temp=temp.next;//temp是遍历的         }         return head;     } }
/**  * 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) {                  while(head!=null && head.val==val){             head=head.next;         }         if(head==null) return head;         ListNode prev=head;//优化,不另外设置temp的做法         while(prev.next!=null){             if(prev.next!=null && prev.next.val==val){//prev结点下一个结点是要删除的节点                 ListNode delnode=prev.next;                 prev.next=delnode.next;                 delnode.next=null;             }else{                 prev=prev.next;//prev结点下一个结点不是要删除的节点是,把prev更新该结点             }          }         return head;     } }

 

 

相关内容

热门资讯

原创 百... 5 月 13 日,Create2026 百度 AI 开发者大会在北京盛大启幕。百度创始人李彦宏在会上...
英伟达CEO黄仁勋称五年前的G... IT之家 5 月 13 日消息,在 AI 需求进入爆发周期的背景下,GPU 成为最紧缺的算力资源之一...
埃尔温·薛定谔:物理学最不情愿... 今天,我们面对的是一位巨匠。 他叫埃尔温·薛定谔。 在翻开他的故事之前,我想请你做一件事:想象一个盒...
破解40万年前直立人“分子密码... 中新网北京5月13日电 (记者 孙自法)作为第一个走出非洲并广泛扩散至亚欧大陆及东南亚的关键古人类,...
前华为具身智能“1号员工”领衔... 5月13日消息,深圳欧拉万象科技有限公司(下称“欧拉万象”)宣布完成数亿元人民币融资,由招商局创投领...