Leet Code刷题笔记(一)--203.移除链表元素

力扣Leet Code刷题笔记(一)–203.移除链表元素

这是我的刷题笔记的第一篇,后面会持续更新我的学习笔记,不止会有数据结构与算法上的学习,还会有数电模电,操作系统,单片机,linux,服务器等等

前言

这篇文章使用c语言进行实现
下面会出现的英文意思
p+单词缩写:

  1. p->pointer
  2. cur->current
  3. pre->previous

我们开始吧

点此直达哦->移除链表元素

题目描述

给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回 新的头节点 。

/**
 * Definition for singly-linked list.
 * struct ListNode
 * {
 *     int val;
 *     struct ListNode *next;
 * };
 */

示例1:

输入: head = [1,2,6,3,4,5,6], val = 6
输出: [1,2,3,4,5]
示例1图片

示例2:

输入: head = [], val = 1
输出: []

示例3:

输入: head = [7,7,7,7], val = 7
输出: []

解题思路

这里我经过我的思考和借鉴,我最终使用了三种方法去完成这道题目的解答

方法一: 定义新链表 并尾插所需要的元素

思路: 只需要将需要的节点添加到新链表即可

  1. 我们先定义一个新的指针newhead用来保存新链表的头
  2. 定义指针newtail保存新链表的尾巴,用于尾插
  3. 定义指针pcur来保存当前遍历的节点
  4. 遍历链表
    1. 当前节点的值和需要比较的值不相等,尾插节点
      1. 链表为空:头指针和尾指针同指向pcur
      2. 链表不为空:尾插pcur到尾巴
  5. 如果新链表不为空,在某些情况尾指针指向的下一个节点不是NULL,因此尾指针指向的下一个节点需要手动指向NULL

就如上后面的示例一,加入前面五个节点之后此时尾指针指向值为5这个节点,这个节点存储的指针又指向了值为6的节点,所以我们需要手动将尾指针指向NULL
还有什么情况呢,动手试试吧

  1. 返回新链表的头指针

Code 代码:

typedef struct ListNode ListNode;

struct ListNode* removeElements(struct ListNode* head, int val)
{
   
    ListNode* newhead 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值