首页 > 其他分享 >LeetCode 203. 移除链表元素

LeetCode 203. 移除链表元素

时间:2023-05-05 17:45:12浏览次数:51  
标签:203 ListNode val nil 元素 head Next 链表 移除

题目链接:LeetCode 203. 移除链表元素
本题是一个经典的单链表删除元素的题目,主要注意的有两点:

  1. 如果删除的元素是不是头元素,则直接 p.Next= p.Next.Next即可
  2. 如果删除的元素是头元素,则需要进行单独的处理
 for head != nil &&  head.Val == val {
       head = head.Next
}
if head == nil {
        return nil
}

完整代码如下:

func removeElements(head *ListNode, val int) *ListNode {

    // 删除头结点
    for head != nil &&  head.Val == val {
       head = head.Next
    }
     if head == nil {
        return nil
    }
    //删除非头节点的情况
    p:=head
    for p.Next != nil && p!=nil {
        if p.Next.Val == val {
            p.Next= p.Next.Next
        }else{
            p = p.Next
        }
    }
    return head

}

当然如果不想单独的处理删除头节点的情况,只需要声明一个虚拟的头节点即可。
完整代码如下:

func removeElements(head *ListNode, val int) *ListNode {

 dummy := &ListNode{}  //虚拟头节点
 dummy.Next=head
 p := dummy

for p.Next!=nil{
    if p.Next.Val==val{
        p.Next=p.Next.Next
    }else{
        p=p.Next
    }       
}
return dummy.Next
}

标签:203,ListNode,val,nil,元素,head,Next,链表,移除
From: https://www.cnblogs.com/lxing-go/p/17374859.html

相关文章

  • LeetCode 27. 移除元素 题解
    题目链接:LeetCode27.移除元素本题大意是要对一个数组进行原地删除数值等于val的元素。双指针算法:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。快指针(p指针):寻找新数组的元素,新数组就是不含有目标元素的数组慢指针(q指针):指向更新新数组下标的位置当......
  • 合并两个排序的链表
    描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围: 0≤n≤1000,−1000≤节点值≤1000要求:空间复杂度 O(1),时间复杂度 O(n) 如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6} ......
  • 力扣141(Java)-环形链表(简单)
    题目:给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos不作为参数进行传递 。仅仅是为了标识......
  • ds:带头结点的单链表与不带头结点的单链表区别
     写在前边:单链表都有头指针,不一定有头结点;有无头结点的单链表,定义时数据类型都一样,只是初始化时、插入、删除时不同。 一、带头结点的单链表头结点:为方便编写代码而设置的头结点。存储结构:L->头结点->a1->a2->NULL,头结点不存储数据初始化:malloc申请空间后要L->next=NULL......
  • 建立链表
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct_link{intval;structval*next;}Link;Link*Build(){intval;Link*head=NULL,*tail=NULL,*cur=NULL;//头......
  • 面试题 02.07(Java). 链表相交(简单)
    题目:本题与:力扣160相交链表一致给你两个单链表的头节点 headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构......
  • 链表的基本操作
    classListNode{val:numbernext:ListNode|nullconstructor(val?:number,next?:ListNode|null){this.val=(val===undefined?0:val)this.next=(next===undefined?null:next)}}/***数组转链表*@paramarr*@paraminde......
  • 链表内指定区间反转
    描述将一个节点数为size链表m 位置到 n位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。例如:给出的链表为 1→2→3→4→5→NULL, m=2,n=4,返回 1→4→3→2→5→NULL.数据范围: 链表长度 0<size≤1000,0<m≤n≤size,链表中每个节点的值满足∣val∣≤1000要......
  • 剑指 Offer II 022. 链表中环的入口节点
    题目链接:剑指OfferII022.链表中环的入口节点方法一:哈希解题思路统计走过的节点,当第一次遇到重复的节点时,即为入口节点,否则为\(null\)。代码classSolution{public:ListNode*detectCycle(ListNode*head){unordered_map<ListNode*,bool>cache;......
  • LeetCode 链表操作
    21. 合并两个有序链表/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){this.val=val;}*ListNode(intval,ListNodenext){this.val=val;this.......