leetcode当中的链表刷题题目精选1---移除链表元素 - Go语言中文社区

leetcode当中的链表刷题题目精选1---移除链表元素


备注:本文有一部分内容参考代码随想录相关文章,侵权请联系作者删除

目录

备注:本文摘自于代码随想录,侵权请联系作者删除

1.解题代码

2.解题思路:

                      3.注意点:如何设置一个虚拟的结点


1.解题代码

题目链接:移除链表元素

先上代码:

var removeElements = function(head, val) {
    const ret = new ListNode(0, head);
    let cur = ret;
    while(cur.next) {
        if(cur.next.val === val) {
            cur.next =  cur.next.next;
            continue;
        }
        cur = cur.next;
    }
    return ret.next;
};

2.解题思路:

这里以链表 1 4 2 4 来举例,移除元素4。

203_链表删除元素1

如果使用C,C++编程语言的话,不要忘了还要从内存中删除这两个移除的节点, 清理节点内存之后如图:

203_链表删除元素2

当然如果使用java ,python的话就不用手动管理内存了。

还要说明一下,就算使用C++来做leetcode,如果移除一个节点之后,没有手动在内存中删除这个节点,leetcode依然也是可以通过的,只不过,内存使用的空间大一些而已,但建议依然要养成手动清理内存的习惯。

这种情况下的移除操作,就是让节点next指针直接指向下下一个节点就可以了,

那么因为单链表的特殊性,只能指向下一个节点,刚刚删除的是链表的中第二个,和第四个节点,那么如果删除的是头结点又该怎么办呢?

这里就涉及如下链表操作的两种方式:

  • 直接使用原来的链表来进行删除操作。
  • 设置一个虚拟头结点在进行删除操作。

来看第一种操作:直接使用原来的链表来进行移除。

203_链表删除元素3

移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。

所以头结点如何移除呢,其实只要将头结点向后移动一位就可以,这样就从链表中移除了一个头结点。

203_链表删除元素4

依然别忘将原头结点从内存中删掉。 

 203_链表删除元素5

这样移除了一个头结点,是不是发现,在单链表中移除头结点 和 移除其他节点的操作方式是不一样,其实在写代码的时候也会发现,需要单独写一段逻辑来处理移除头结点的情况。

那么可不可以 以一种统一的逻辑来移除 链表的节点呢。

其实可以设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除了。

来看看如何设置一个虚拟头。依然还是在这个链表中,移除元素1。

203_链表删除元素6

这里来给链表添加一个虚拟头结点为新的头结点,此时要移除这个旧头结点元素1。

这样是不是就可以使用和移除链表其他节点的方式统一了呢?

来看一下,如何移除元素1 呢,还是熟悉的方式,然后从内存中删除元素1。

最后呢在题目中,return 头结点的时候,别忘了 return dummyNode->next;, 这才是新的头结点

 3.注意点:如何设置一个虚拟的结点

A.初始化一个空结点,没有复制,指针指向list

        ListNode list=new ListNode();

B.初始化一个空结点,初始值为0,指针指向为list

        ListNode list=new ListNode(0);

C.初始化一个空结点,初始赋值为0,并且list的下一个next指针指向head,指针指向为list

        ListNode list=new ListNode(0,head);

D.定义一个空链表

        ListNode list=null;

通常定义一个空结点需要有结点的next指针指向,否则,只是定义一个空结点

E.通常使用以下两种方法:

        ListNode list=new ListNode(0,head);

或者

        ListNode list=new ListNode(0);

        list.next=head;
 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_68997646/article/details/128425883
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-02 21:39:54
  • 阅读 ( 175 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢