倒数日怎么删除不用的事件-倒数日怎么删除日期

倒数日怎么删除不用的事件
倒数日是一款倒计时软件,添加的事件可以进行删除,进入事件编辑即可删除。具体操作方法如下:倒数日怎么删除不用的事件1、打开手机倒数日app,点击需要删除的事件,进入事件页面。2、点击右上角笔的标志。3、点击“删除”,确认删除即可...

倒数日怎么删除不用的事件

倒数日是一款倒计时软件,添加的事件可以进行删除,进入事件编辑即可删除。具体操作方法如下:

倒数日怎么删除不用的事件


1、打开手机倒数日app,点击需要删除的事件,进入事件页面。

2、点击右上角笔的标志。

3、点击“删除”,确认删除即可将事件删除。

操作环境

品牌型号:iPhone13

系统版本:ios15.1.1

软件版本:倒数日1.11.0-1HM

459. 删除链表的倒数第N个节点的3种方式

问题描述

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1-2-3-4-5, 和 n = 2.

当删除了倒数第二个节点后,链表变为

1-2-3-5.

说明:

给定的 n 保证是有效的。

非递归解决

这题让删除链表的倒数第n个节点,首先最容易想到的就是先求出链表的长度length,然后就可以找到要删除链表的前一个结点,让他的前一个结点指向要删除结点的下一个结点即可,这里就以示例为例画个图看一下

再来看下代码

public ListNode removeNthFromEnd(ListNode head, int n) { ListNode pre = head; int last = length(head) - n; //如果last等于0表示删除的是头结点 if (last == 0) return head.next; //这里首先要找到要删除链表的前一个结点 for (int i = 0; i last - 1; i++) { pre = pre.next; } //然后让前一个结点的next指向要删除节点的next pre.next = pre.next.next; return head;}//求链表的长度private int length(ListNode head) { int len = 0; while (head != null) { len++; head = head.next; } return len;}

双指针求解

上面是先计算链表的长度,其实不计算链表的长度也是可以,我们可以使用两个指针,一个指针fast先走n步,然后另一个指针slow从头结点开始,找到要删除结点的前一个结点,这样就可以完成结点的删除了。

public ListNode removeNthFromEnd(ListNode head, int n) { ListNode fast = head; ListNode slow = head; //fast移n步, for (int i = 0; i n; i++) { fast = fast.next; } //如果fast为空,表示删除的是头结点 if (fast == null) return head.next; while (fast.next != null) { fast = fast.next; slow = slow.next; } //这里最终slow不是倒数第n个节点,他是倒数第n+1个节点, //他的下一个结点是倒数第n个节点,所以删除的是他的下一个结点 slow.next = slow.next.next; return head;}

递归解决

我们知道获取链表的长度除了上面介绍的一种方式以外,还可以写成递归的方式,比如

//求链表的长度private int length(ListNode head) { if (head == null) return 0; return length(head.next) + 1;}

上面计算链表长度的递归其实可以把它看做是从后往前计算,当计算的长度是n的时候就表示遍历到了倒数第n个节点了,这里只要求出倒数第n+1个节点,问题就迎刃而解了,来看下代码

public ListNode removeNthFromEnd(ListNode head, int n) { int pos = length(head, n); // 说明删除的是头节点 if (pos == n) return head.next; return head;}// 获取节点所在位置,逆序public int length(ListNode node, int n) { if (node == null) return 0; int pos = length(node.next, n) + 1; //获取要删除链表的前一个结点,就可以完成链表的删除 if (pos == n + 1) node.next = node.next.next; return pos;}

总结

要删除链表的倒数第n个节点,首先要找到链表的倒数第n+1个节点,这样就可以完成链表的删除了,关于怎么找,方式有多种。但要注意一点如果删除的是头结点的话,那么就不存在倒数第n+1个节点,所以这个要注意一下。

python链表删除倒数第N个节点

题目说明

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

输入:head = [1,2,3,4,5], n = 2

输出:[1,2,3,5]

解题思路遍历链表A到尾部,并计算count;然后遍历链表B判断countn,跳出循环则head.next=head.next.next。遍历链表A count与n的距离,然后接着遍历链表A,链表B,跳出循环则head.next = head.nexe.next代码如下class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = nextclass Solution: def removeNthFromEnd(self, head: ListNode, n: int) - ListNode: # 通过链表移动计算出链表大小与删除节点位置的距离 res = ListNode(next=head) # 创建一个虚拟节点,next指向头 h_head = l_head = res count = 0 while l_head.next is not None and count != n: # 移动尾节点,使其与头节点保持n个节点 l_head = l_head.next count += 1 while l_head.next is not None: # 尾节点遍历完 l_head = l_head.next h_head = h_head.next h_head.next = h_head.next.next # 头节点的下一个节点指向它的下下个节点 return res.next def removeNthFromEnd_1(self, head: ListNode, n: int) - ListNode: # 先遍历链表长度,然后判断长度与删除节点的距离 res = ListNode(next=head) # 创建一个虚拟节点,next指向头 h_head = l_head = res count = 0 while l_head.next is not None: # 第一位是虚拟的头节点 l_head = l_head.next count += 1 while count n: h_head = h_head.next count -= 1 h_head.next = h_head.next.next # 头节点的下一个节点指向它的下下个节点 return res.next

#每日一题##python##程序员#

总结

本文来自寂寞赱遠投稿,不代表美啦巴巴立场,如若转载,请注明出处:https://www.meila8.com/5/2515.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 12-14
下一篇 12-14

相关推荐

  • 倒数日怎么删除不用的事件-倒数日怎么删除日期

    倒数日怎么删除不用的事件
    倒数日是一款倒计时软件,添加的事件可以进行删除,进入事件编辑即可删除。具体操作方法如下:倒数日怎么删除不用的事件1、打开手机倒数日app,点击需要删除的事件,进入事件页面。2、点击右上角笔的标志。3、点击“删除”,确认删除即可

    2022-12-14 12:50:01
    421 0

评论列表

联系我们

123456

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信