门户网站系统源码,微信公众号属于网站建设,免费生成网页的网站,网站注册器目录 题目地址#xff1a; 题目#xff1a; 我们直接看题解吧#xff1a; 解题方法#xff1a; 审题目事例提示#xff1a; 解题分析#xff1a; 解题思路#xff08;双指针#xff09;#xff1a; 代码实现#xff1a; 代码实现#xff08;直接遍历#xff09; 题目 我们直接看题解吧 解题方法 审题目事例提示 解题分析 解题思路双指针 代码实现 代码实现直接遍历 代码实现单指针 题目地址 LCR 136. 删除链表的节点 - 力扣LeetCode 难度简单 今天刷删除链表的节点大家有兴趣可以点上看看题目要求试着做一下。
题目 给定单向链表的头指针和一个要删除的节点的值定义一个函数删除该节点。 返回删除后的链表的头节点。 我们直接看题解吧
解题方法 方法1、直接遍历 或者单指针 方法2、双指针空间复杂度较优 审题目事例提示 直接返回链表的头指针即可 解题分析 本题主要分两步找出节点修改引用若找得到 这里删除链表要分情况 1找得到要删除的对应节点 ·要删除的节点是头结点head,即要第一个位置的节点 ·要删除的节点是中间或者尾节点 2找不到要删除的对应节点 解题思路双指针 1、创建并初始化双指针pre指向headcur指向head.next 2、循环遍历链表找出对应的节点找到或者没找到但遍历完链表则退出 3、若找到了则修改对应节点的引用 没找到直接返回头结点 4、最后返回头结点 代码实现
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val x; }* }*/
class Solution {public ListNode deleteNode(ListNode head, int val) {//先判断要删除的节点是不是头结点这个比较特殊if(head.val val) return head.next; //创建双指针pre,cur分别指向当前节点与下一个节点ListNode pre head, cur head.next; //循环条件没找到但遍历完了链表或者找到对应的节点while(cur ! null cur.val ! val) {pre cur;cur cur.next;}//如果是找到对应的节点则修改引用指向然后执行下一行代码即返回头结点if(cur ! null) pre.next cur.next;//如果是没找到对应的节点跳过本行代码直接执行下一行代码即返回头结点return head;}
}
代码实现直接遍历 class Solution { public ListNode deleteNode(ListNode head, int val) {ListNode dummy new ListNode(0, head);ListNode temp dummy;while (true){if (temp.next.val val){temp.next temp.next.next;break;}temp temp.next;}return dummy.next;}
}
代码实现单指针
class Solution {public ListNode deleteNode(ListNode head, int val) {if (head null) return null;if (head.val val) return head.next;ListNode cur head;while (cur.next ! null cur.next.val ! val)cur cur.next;if (cur.next ! null)cur.next cur.next.next;return head;}
}