移除链表元素

203. 移除链表元素

我今天才发现原来我连移除链表元素都不会
最简单情况:删除中间节点ListNode1,只需要把ListNode0指向ListNode2即可。这一点很简单。
难在初始的节点如何处理。

答:使用哨兵节点。即在第一个节点前再加一个节点,使得新链表的第一个节点不处于临界状态,可以直接从第二个节点进行判断。
另外加入pre节点和current节点。pre节点表示前一个加入新链表的节点,而current节点表示当前需要判断的节点

class Solution {
    public ListNode removeElements(ListNode head, int val) {
       ListNode soilder=new ListNode(0);
       soilder.next=head;
       ListNode current=head;
       ListNode pre=soilder;
       while(current!=null){
           if(current==val){
               pre.next=current.next
           }else{
               pre=current;
           }
           current=current.next;
       }
       return soilder.next;
    }
}

这题感觉还是很经典的,尤其是pre节点和哨兵节点的思想,很重要。本质上还是双指针的思想。
一个快指针和一个慢指针,在这里pre就是慢指针,pre的移动取决于current的值,current的移动是不受条件限制的,随着循环前进。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。