前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天一算:Remove Linked List Elements

每天一算:Remove Linked List Elements

作者头像
五分钟学算法
发布2018-11-20 15:24:28
4750
发布2018-11-20 15:24:28
举报
文章被收录于专栏:五分钟学算法五分钟学算法

LeetCode上第203号问题:Remove Linked List Elements

题目

删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5

解题思路

主要考察了基本的链表遍历和设置指针的知识点。

定义一个虚拟头节点dummyHead,遍历查看原链表,遇到与给定值相同的元素,将该元素的前后两个节点连接起来,然后删除该元素即可。

动画演示

动画演示GIF有点大,请稍微等待一下加载显示^_^

动画演示

参考代码

代码一
代码语言:javascript
复制
 1// 203. Remove Linked List Elements
 2// https://leetcode.com/problems/remove-linked-list-elements/description/
 3// 使用虚拟头结点
 4// 时间复杂度: O(n)
 5// 空间复杂度: O(1)
 6class Solution {
 7public:
 8    ListNode* removeElements(ListNode* head, int val) {
 9
10        // 创建虚拟头结点
11        ListNode* dummyHead = new ListNode(0);
12        dummyHead->next = head;
13
14        ListNode* cur = dummyHead;
15        while(cur->next != NULL){
16            if(cur->next->val == val){
17                ListNode* delNode = cur->next;
18                cur->next = delNode->next;
19                delete delNode;
20            }
21            else
22                cur = cur->next;
23        }
24
25        ListNode* retNode = dummyHead->next;
26        delete dummyHead;
27
28        return retNode;
29    }
30};
代码二

用递归来解。

通过递归调用到链表末尾,然后回来,需要删的元素,将链表next指针指向下一个元素即可。

代码语言:javascript
复制
1class Solution {
2public:
3    ListNode* removeElements(ListNode* head, int val) {
4        if (!head) return NULL;
5        head->next = removeElements(head->next, val);
6        return head->val == val ? head->next : head;
7    }
8};

执行结果

执行结果

我们会在每天早上8点30分准时推送一条LeetCode上的算法题目,并给出该题目的动画解析以及参考答案,每篇文章阅读时长为五分钟左右。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 五分钟学算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 解题思路
  • 动画演示
  • 参考代码
    • 代码一
      • 代码二
      • 执行结果
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档